NEWSニュース&ブログ

【SQL Server】Always Encrypetedを使ってみよう①

投稿日:2025/01/21

はじめに

 SQL Serverにおいても高セキュリティを実現するために役立つベストプラクティスとガイドラインが公開されています。
 今回はその中でも列レベルの保護の機能である「Always Encrypted」についてご紹介します。

列レベルの保護

 公式Docでは「動的データマスキング」と「Always Encrypted」が挙げられています。なお、動的データマスキングに関しては以下のブログ記事も作成しているので、気になる方はご覧ください。
【SQL Server】動的データマスクで顧客情報を安全に保護する方法

 この2つの大きな違いはデータ自体の暗号化を行っているか否かにあります。動的データマスキングではデータ自体はプレーンテキストのままデータベース内に格納され、Always Encryptedではデータを暗号化してデータベース内に格納されます。

 よって、セキュリティレベルにおいてはAlways Encryptedの方が高いため、Microsoftも可能な限り動的データマスキングよりもAlways Encryptedを使用することを推奨しています。

Always Encryptedの概要

 Always Encryptedは、特定の列(カラム)に対して暗号化することができます。たとえば、社会保障番号やクレジットカード番号など、特に保護が必要な情報を選んで暗号化できます。

 これにより、データベース内ではその情報が暗号化された状態で保存され、実際の値は見えません。

 データを復号化できるのは、暗号化するために使用した証明書を持つ特定の利用者のみです。一般利用者だけでなく、管理者権限を持つDBAにおいてもデータの内容を直接見ることができなくなります。

暗号化方法

 Always Encryptedは、以下2つの暗号化をサポートしています。

1.決定論的な暗号化
 同じプレーンテキストに対して常に同じ暗号化された値が生成されます。この方法を使うと、暗号化された列でのポイント参照や等価結合、グループ化、インデックス作成が可能です。しかし、同じ値が常に同じ暗号化結果になるため、特に値の種類が少ない場合は不正なユーザーが暗号化された値のパターンを分析し、元のデータを推測するリスクがあります。

2.ランダム化された暗号化
 データを予測できない方法で暗号化することができます。つまり、同じプレーンテキストを入力しても、異なる暗号化された出力が生成されるため、セキュリティが向上します。この方法は同じデータが異なる暗号化結果を持つため、外部からの推測が難しくなりますが、ポイント参照や等価結合、グループ化、インデックスの作成ができなくなりますのでご注意ください。

データ操作方法

 暗号化された列を参照したり、データを挿入する場合にはクエリパラメータを使用する必要があります。そのため、SSMSでの操作やアプリケーションでの処理も考慮しなければいけません。

まとめ

 Always Encryptedを利用することによりデータ自体を暗号化することができるため、高いセキュリティを実現することができそうです。

 実機での検証も行いましたので、次回のブログにて結果を記載しようと思います。

中川 智文(2022年入社)
株式会社システムサポート フューチャーイノベーション事業本部 ソリューションサービス事業部所属
Oracle Database, SQL Serverを中心とした案件に従事