Always Encryptedとは
Always Encryptedは、SQL Server 2016から新たに導入された、データの暗号化の機能になります。
この機能が実装された理由や利用するシナリオを理解するために、現在までのSQL Serverで実装されてきた、データ暗号化技術について、少し振り返ってみましょう。
表1が、これまでにSQL Serverに実装されてきたデータ暗号化技術となります。既にサポートが切れたバージョンとなりますが、SQL Server 2000の頃はSQL Server自身はデータ暗号化の技術は持っていませんでした。SQL Server 2005からは列レベルのデータ暗号化が実装されましたが、アプリケーション側での実装が必要であり、それなりに敷居が高い状態でした。
SQL Server 2008になると、透過的暗号化が実装されました。この機能は、SQL ServerがI/Oの際にデータを暗号化してファイルに保存する機能であり、アプリケーション側での実装が必要はありません。比較的容易に利用することができ、あとはサーバーの管理者が管理者権限をしっかり管理していれば、第三者によってファイルがコピーされても、データは安全に保護されることになります。この機能は、「データファイルをコピられて、データ流出したらどうしよう!」という眠れぬDBA達に、心の安寧をもたらしたのです。
さて、如何に、透過的暗号化でもサーバーの管理者が管理者権限をもって悪意ある操作をしてきては、データを守ることはできません。ただし、自分たちで管理しているサーバーであれば、信頼できる管理者がいる(はずな)ので、普通は心配することはありませんでした。
しかし、月日が流れます。
透過的暗号化の登場によって、一旦は約束された地に到達したDBA達ですが、新たな不安要素に直面することになりました。それはホスティングサービスや、クラウドの登場です。時代の流れとして、自分たちが管理していたデータベースを、こうした環境に配置しなければならないシチュエーションが発生してきました。
「俺の可愛いデータベースを、どこの馬の骨ともわからぬサーバー管理者の管理するところに配置するのか!」
そんな時代のDBAの心の平穏のために実装された、センシティブなデータを保護するための暗号化技術、それがAlways Encryptedなのです。
と、まあ、クラウドの話を主題として取り上げましたが、本質としてはサーバーの管理とアプリケーションの管理を分離して、センシティブなデータを保護する機能となります。その為、クラウド環境だけでなく、オンプレミス環境において外部ベンダーをサーバー管理者とするようなシチュエーションでも利用できる機能となります。