Netwrix 1Secureは、データとアイデンティティ全体にわたる統合された可視性を提供します。14日間の無料トライアルでフルアクセス可能です。無料トライアルを開始

リソースセンターブログ

SQL Server の暗号化を解説:TDE、列レベル暗号化など

SQL Server の暗号化を解説:TDE、列レベル暗号化など

Mar 17, 2023

データ保護は、組織が GDPR のような規制コンプライアンス基準に準拠し、また顧客やビジネスパートナーの期待に応えるために重要です。データ侵害 では、大きな罰金につながる可能性があるだけでなく、評判上の損害も同様に大きくなることがあります。そこで、Microsoft SQL Server はデータ保護のための 5 種類の暗号化方式に対応しています。この記事では、それぞれの概要と、どこで使用すべきかを解説します。

厳選された関連コンテンツ:

SSL トランスポート暗号化

ブラウザとサーバー間の通信を保護するWebサイトと同様に、SQL Server は Secure Sockets Layer(SSL)を使用するように構成して、サーバー インスタンスとクライアント アプリケーションの間を移動する通信を暗号化できます。さらに、クライアントはサーバーの証明書を使ってサーバーの身元を検証することも可能です。SSL はネットワークをまたいで送信される間のデータのみを保護しますが、ほとんどの他の SQL Server の暗号化方式とは異なり、SSL は SQL Server のサポートされているすべてのバージョンおよびすべてのエディションで利用できます。

SSL を有効にする前に、SQL Server に証明書をインストールする必要があります。最も適した方法は、自社のエンタープライズ証明書発行局(CA)から証明書を申請することです。Windows Server は CA として構成でき、CA が発行する証明書をクライアントが信頼するように設定できます。別の方法として自己署名証明書を使用することも可能ですが、これは主にテスト環境に適しています。

SQL Server トランスペアレント データ暗号化(TDE)

SQL Server の Transparent Data Encryption (TDE) は、ディスク上のデータベース データとログ ファイルを暗号化することで、保存データ(at rest)を保護します。TDE は既存のクライアント アプリケーションに対して透過的に動作するため、TDE を有効にしても変更は不要です。TDE はページ レベルでリアルタイム暗号化を使用します。ページはディスクに書き込まれる前に暗号化され、データおよびログ ファイルのサイズが増加することなく、読み込み時にメモリへ取り込まれる際に復号されます。TDE は SQL Server の Enterprise エディションでのみ利用可能です。さらに、Azure SQL Database、Azure SQL Data Warehouse、Parallel Data Warehouse にも対応しています。

TDE の暗号化は階層構造になっており、Windows Data Protection API (DPAPI) が最上位に位置して、これを用いて service master key (SMK) を暗号化します。SMK を使って、資格情報、リンク サーバーのパスワード、そして別のデータベースに存在するデータベース マスター キー (DMK) を暗号化できます。SQL DMK は対称鍵であり、データベースに格納されている証明書の秘密鍵や非対称鍵を保護します。

SQL Server は TDE 用の自己署名証明書を生成できますが、CA から証明書を取得することも可能です(こちらがより一般的な方法です)。TDE を有効にすることを決めた場合は、証明書と、その証明書に関連付けられた秘密鍵をバックアップしておく必要があります。別の SQL Server にデータベースを復元またはアタッチ(attach)することになります。別の SQL Server のどのデータベースでも TDE を有効にすると、tempdb システム データベースも暗号化されます。TDE を無効にする場合は、証明書と秘密鍵を保持してください。トランザクション ログの一部が、完全バックアップを実行するまで暗号化されたまま残る可能性があります。

TDE では、データベース暗号化キー(DEK)も必要です。DEK は、マスター データベースに格納されている証明書を使用して保護される対称鍵である場合もあれば、Extensible Key Management (EKM) を利用するサービス(例: Microsoft Azure Key Vault)によって保護される非対称鍵である場合もあります。TDE を有効にしたデータベースのバックアップ ファイルは DEK を使って暗号化されます。したがって復元(restore)を行う際には、DEK を保護している証明書が利用可能である必要があります。

対称鍵は、データの暗号化と復号に同じパスワードを使用します。非対称鍵は、データの暗号化には 1 つのパスワード(公開鍵)を、データの復号には別のパスワード(秘密鍵)を使用します。CREATE CERTIFICATE コマンドを使って証明書を作成でき、CREATE SYMMETRIC KEY および CREATE ASYMMETRIC KEY の Transact-SQL コマンドを使ってデータベース暗号化キーを作成できます。

バックアップの暗号化

バックアップの暗号化は TDE と同様に機能しますが、アクティブなデータやログ ファイルではなく SQL のバックアップを暗号化します。バックアップの暗号化は SQL Server 2014 以降で利用できます。AES 128、AES 192、AES 256 または Triple DES の暗号化を指定でき、EKM に保存された証明書、または非対称キーのいずれかを使用できます。さらに、TDE とバックアップの暗号化を同時に有効にすることも可能ですが、その場合は異なる証明書またはキーを使用する必要があります。

TDE と同様に、バックアップの暗号化を有効にする場合は、証明書またはキーもバックアップする必要があります。キーまたは証明書がないと、バックアップ ファイルを使ってデータを復元できません。さらに、SQL Server Managed Backup を Microsoft Azure に使用するときは、バックアップを暗号化することもできます。

バックアップの暗号化に証明書を使用している場合は、データを復元するときに元の証明書が必要である点に留意してください。つまり、証明書のスムープリント(thumbprint)が、バックアップ作成時と同じである必要があります。証明書の更新や、何らかの形での変更は、thumbprint が変わる原因になります。

列/セル レベルの暗号化

SQL Server のすべてのエディションで利用可能であり、機密データを含む列に対してセルレベル暗号化を有効にできます。データはディスク上で暗号化され、DECRYPTBYKEY 関数が使用されて復号されるまで、メモリ内では暗号化された状態のまま維持されます。したがって、SQL データは暗号化されていますが、ユーザー コンテキスト内で復号するための関数を単に使用するだけでは、それ以上の安全性は得られません。さらに、データを復号するには関数が必要なため、セルレベル暗号化に対応するようにクライアント アプリケーションを修正する必要があります。

暗号化キーの管理

TDE の場合と同様に、セルレベル暗号化を使用する前にマスター キー(DMK)を作成する必要があります。セルレベル暗号化を使って情報を暗号化する方法には、4 つの選択肢があります。

  • パスフレーズを使用してデータを暗号化および復号できますが、保存プロシージャと関数を暗号化する必要があります。そうしないと、パスフレーズがメタデータから参照できてしまいます。
  • 非対称キーは強力なセキュリティを提供しますが、パフォーマンスに影響を与える可能性があります。
  • 対称キーは通常十分に強力であり、セキュリティとパフォーマンスのバランスが良好です。
  • 証明書もセキュリティとパフォーマンスのバランスが良く、データベース ユーザーに関連付けることができます。

Always Encrypted

Always Encrypted は、暗号化キーをデータベース エンジンに開示することなく、クライアント アプリケーション内で機密データを暗号化し、データ所有者とデータ管理者の分離を実現します。たとえば Always Encrypted を有効にすると、データベース管理者が機密データを読み取れないことを確実にできます。名前のとおり、データは保存時に暗号化され、Azure のようなサードパーティ システムで使用する場合にも暗号化されます。

Always Encrypted は、個々のデータベース列に対して設定できます。使用されるキーは 2 種類です。列暗号化キーと列マスター キーです。列暗号化キーは列内のデータを保護し、列マスター キーは、1 つ以上の列暗号化キーを暗号化する「キー保護キー」です。列マスター キーは、Azure Key Vault のような外部の信頼できるキーストアに保存されます。

暗号化プロセスはクライアント アプリケーションからは透過的ですが、クライアント コンピューター上に特別なドライバーが必要です。Always Encrypted は SQL Server 2016 以降で利用できますが、Enterprise エディションでのみ提供されます。クライアント側に追加の要件があるため、Always Encrypted はデータ所有者と管理者の分離が主要な要件である状況に最適です。

共有する

もっと詳しく

著者について

Asset Not Found

Russell Smith

ITコンサルタント

管理およびセキュリティ技術を専門とする IT コンサルタント兼著者です。Russell は IT 分野で 15 年以上の経験があり、Windows セキュリティに関する書籍を執筆し、Microsoft の Official Academic Course(MOAC)シリーズ向けの教材も共著しています。