透過的なデータ暗号化 (TDE) について

データベースをセキュリティで保護するために、安全なシステムの設計、機密資産の暗号化、データベース サーバーに対するファイアウォールの構築などの予防策を講じることができます。ただし、物理メディア (ドライブやバックアップ テープなど) が盗まれた場合は、悪意のある人物によってデータベースが復元またはアタッチされ、データが参照されるおそれがあります。解決策の 1 つは、データベース内の機密データを暗号化し、データの暗号化に使用されるキーを証明書で保護することです。これにより、キーを持たない人物によるデータの使用を防止できますが、このような保護は事前に計画する必要があります。

透過的なデータ暗号化 (TDE) では、データとログ ファイルの暗号化と暗号化解除がリアルタイムの I/O で実行されます。暗号化にはデータベース暗号化キー (DEK) が使用されます。これは、復旧時に使用できるようにデータベース ブート レコードに保存されます。DEK は、サーバーの master データベースに保存されている証明書を使用して保護される対称キーか、EKM モジュールによって保護される非対称キーです。TDE では、"静止した" データ、つまりデータとログ ファイルが保護されます。この暗号化は、法律、規制、およびさまざまな業界で確立されているガイドラインの多くに準拠できるようになっています。これによりソフトウェア開発者は、既存のアプリケーションを変更することなく、AES および 3DES 暗号化アルゴリズムを使用してデータを暗号化できます。

重要な注意事項重要

TDE では、通信チャネル全体を暗号化することはできません。通信チャネル全体でデータを暗号化する方法の詳細については、「SQL Server への接続の暗号化」を参照してください。

セキュリティで保護されたデータベースは、正しい証明書を使用することで復元できます。証明書の詳細については、「SQL Server の証明書と非対称キー」を参照してください。

注意

TDE を有効にしたら、証明書とそれに関連付けられた秘密キーを直ちにバックアップする必要があります。証明書が使用できなくなった場合、またはデータベースを別のサーバーに復元またはアタッチする必要がある場合に、証明書と秘密キーの両方のバックアップが必要です。これらのバックアップがない場合は、データベースを開けません。暗号化証明書または非対称キーは、データベースで TDE を無効にした場合でも保持する必要があります。データベースが暗号化されていない場合でも、データベース暗号化キーがデータベース内に保持され、いくつかの操作でデータベース暗号化キーにアクセスする必要が生じることがあります。TDE によるデータの暗号化と暗号化解除を行う場合は、有効期限の切れた証明書を引き続き使用できます。

データベース ファイルの暗号化は、ページ レベルで実行されます。暗号化されたデータベースのページは、ディスクに書き込まれる前に暗号化され、メモリに読み込まれるときに暗号化解除されます。TDE では、暗号化されたデータベースのサイズが増えることはありません。データベース ページの詳細については、「ページとエクステントについて」を参照してください。

TDE 暗号化のアーキテクチャを次の図に示します。

トピックで説明された階層。

透過的なデータ暗号化の使用

TDE を使用するには、次の手順を実行します。

  • マスター キーを作成します。

  • マスター キーで保護された証明書を作成または取得します。

  • データベース暗号化キーを作成し、証明書で保護します。

  • 暗号化を使用するようにデータベースを設定します。

次の例では、MyServerCert という名前のサーバーにインストールされた証明書を使用して、AdventureWorks2008R2 データベースを暗号化および暗号化解除しています。

USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>';
go
CREATE CERTIFICATE MyServerCert WITH SUBJECT = 'My DEK Certificate';
go
USE AdventureWorks2008R2;
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_128
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
GO
ALTER DATABASE AdventureWorks2008R2
SET ENCRYPTION ON;
GO

USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>';
go
CREATE CERTIFICATE MyServerCert WITH SUBJECT = 'My DEK Certificate';
go
USE AdventureWorks2008R2;
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_128
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
GO
ALTER DATABASE AdventureWorks2008R2
SET ENCRYPTION ON;
GO

暗号化および暗号化解除の操作は、SQL Server によってバックグラウンド スレッドでスケジュールされます。これらの操作の状態は、この後の一覧に示すカタログ ビューおよび動的管理ビューを使用して確認できます。

注記注意

TDE が有効になっているデータベースのバックアップ ファイルも、データベース暗号化キーを使用して暗号化されます。このため、このバックアップを復元するときには、データベース暗号化キーを保護している証明書が必要です。つまり、データの損失を防ぐには、データベースをバックアップするだけでなく、サーバー証明書のバックアップも確実に保守する必要があります。証明書が使用できなくなると、データの損失が発生します。詳細については、「SQL Server の証明書と非対称キー」を参照してください。

コマンドと関数

TDE の証明書を次に示すステートメントで処理できるようにするには、この証明書をデータベース マスター キーで暗号化する必要があります。パスワードだけで暗号化された証明書は、ステートメントで暗号化機能として受け付けられません。

重要な注意事項重要

TDE で使用された証明書をパスワードで保護するように変更すると、再起動後にデータベースにアクセスできなくなります。

次の表に、TDE のコマンドと関数の説明とリンクを示します。

コマンドまたは関数

用途

CREATE DATABASE ENCRYPTION KEY (Transact-SQL)

データベースの暗号化に使用されるキーを作成します。

ALTER DATABASE ENCRYPTION KEY (Transact-SQL)

データベースの暗号化に使用されるキーを変更します。

DROP DATABASE ENCRYPTION KEY (Transact-SQL)

データベースの暗号化に使用されたキーを削除します。

ALTER DATABASE の SET オプション (Transact-SQL)

TDE を有効にするために使用される ALTER DATABASE オプションについて説明します。

カタログ ビューと動的管理ビュー

次の表に、TDE のカタログ ビューと動的管理ビューを示します。

カタログ ビューまたは動的管理ビュー

用途

sys.databases (Transact-SQL)

データベース情報を表示するカタログ ビュー

sys.certificates (Transact-SQL)

データベース内の証明書を表示するカタログ ビュー

sys.dm_database_encryption_keys (Transact-SQL)

データベースで使用されている暗号化キー、およびデータベースの暗号化の状態に関する情報を表示する動的管理ビュー

権限

TDE の各機能とコマンドには、上の表で説明されているように、個別の権限要件があります。

TDE に関係するメタデータを表示するには、証明書に対する VIEW DEFINITION 権限が必要です。詳細については、「VIEW DEFINITION 権限」を参照してください。

注意事項

データベース暗号化操作の再暗号化スキャンが実行されている間は、データベースに対するメンテナンス操作が無効になります。メンテナンス操作を実行するには、データベースに対してシングル ユーザー モード設定を使用します。詳細については、「データベースをシングル ユーザー モードに設定する方法 (SQL Server Management Studio)」を参照してください。

データベースの暗号化の状態を確認するには、sys.dm_database_encryption_keys 動的管理ビューを使用します。詳細については、このトピックの「カタログ ビューと動的管理ビュー」を参照してください。

TDE では、データベース内のすべてのファイルとファイル グループが暗号化されます。データベースに READ ONLY とマークされているファイル グループがあると、データベースの暗号化操作は失敗します。

データベースがデータベース ミラーリングまたはログ配布で使用されている場合は、両方のデータベースが暗号化されます。トランザクション ログは、2 つのデータベースの間で送信されるときに暗号化されます。

重要な注意事項重要

データベースを暗号化の対象として設定すると、新しいフルテキスト インデックスが暗号化されるようになります。以前に作成されたフルテキスト インデックスは、アップグレード時にインポートされ、データが SQL Server に読み込まれると TDE で暗号化されます。列でフルテキスト インデックスを有効にすると、フルテキスト インデックス スキャンの実行時に、その列のデータがプレーン テキストでディスクに書き込まれる可能性があります。暗号化された機密データにはフルテキスト インデックスを作成しないことをお勧めします。

暗号化されたデータは、暗号化されていない同等のデータより、圧縮比率が大幅に下がります。TDE を使用してデータベースを暗号化した場合、バックアップの圧縮によってバックアップ ストレージが大幅に圧縮されることはありません。したがって、TDE とバックアップの圧縮を併用することはお勧めしません。

制限事項

最初のデータベース暗号化、キー変更、またはデータベースの暗号化解除の実行中は、次の操作を実行できません。

  • データベース内のファイル グループからのファイルの削除

  • データベースの削除

  • データベースのオフライン化

  • データベースのデタッチ

  • データベースまたはファイル グループの READ ONLY 状態への移行

CREATE DATABASE ENCRYPTION KEY、ALTER DATABASE ENCRYPTION KEY、DROP DATABASE ENCRYPTION KEY、または ALTER DATABASE...SET ENCRYPTION の各ステートメントの実行中は、次の操作を実行できません。

  • データベース内のファイル グループからのファイルの削除

  • データベースの削除

  • データベースのオフライン化

  • データベースのデタッチ

  • データベースまたはファイル グループの READ ONLY 状態への移行

  • ALTER DATABASE コマンドの使用

  • データベースまたはデータベース ファイルのバックアップの開始

  • データベースまたはデータベース ファイルの復元の開始

  • スナップショットの作成

次の操作または状況が発生すると、CREATE DATABASE ENCRYPTION KEY、ALTER DATABASE ENCRYPTION KEY、DROP DATABASE ENCRYPTION KEY、または ALTER DATABASE...SET ENCRYPTION の各ステートメントを実行できなくなります。

  • データベースが読み取り専用であるか、読み取り専用のファイル グループを含んでいる。

  • ALTER DATABASE コマンドが実行されている。

  • データ バックアップが実行されている。

  • データベースがオフラインまたは復元中である。

  • スナップショットが実行されている。

  • データベース メンテナンス タスク。

データベース ファイルを作成する際には、TDE が有効になっているとファイルの瞬時初期化を使用できません。

非対称キーでデータベース暗号化キーを暗号化するには、拡張キー管理プロバイダーに非対称キーが存在する必要があります。

透過的なデータ暗号化とトランザクション ログ

データベースで TDE の使用を有効にすると、仮想トランザクション ログの残りの部分が "ゼロ設定" され、強制的に次の仮想トランザクション ログに移行します。これにより、データベースが暗号化対象として設定された後にトランザクション ログにクリア テキストが残らないことが保証されます。ログ ファイルの暗号化の状態を確認するには、次の例のように sys.dm_database_encryption_keys ビュー内の encryption_state 列を表示します。

USE AdventureWorks2008R2;
GO
/* The value 3 represents an encrypted state 
   on the database and transaction logs. */
SELECT *
FROM sys.dm_database_encryption_keys
WHERE encryption_state = 3;
GO

USE AdventureWorks2008R2;
GO
/* The value 3 represents an encrypted state 
   on the database and transaction logs. */
SELECT *
FROM sys.dm_database_encryption_keys
WHERE encryption_state = 3;
GO

SQL Server のログ ファイル アーキテクチャの詳細については、「トランザクション ログの物理アーキテクチャ」を参照してください。

データベース暗号化キーを変更する前にトランザクション ログに書き込まれたデータは、以前のデータベース暗号化キーで暗号化されます。

データベース暗号化キーを 2 回変更した後は、データベース暗号化キーを再度変更する前に、ログのバックアップを実行する必要があります。

透過的なデータ暗号化と tempdb システム データベース

tempdb システム データベースは、SQL Server インスタンス上の他のデータベースが TDE を使用して暗号化されると暗号化されます。この場合、同じ SQL Server インスタンス上にある暗号化されないデータベースのパフォーマンスに影響が生じることがあります。tempdb システム データベースの詳細については、「tempdb データベース」を参照してください。

透過的なデータ暗号化とレプリケーション

レプリケーションでは、TDE が有効になっているデータベースのデータが暗号化された形式で自動的にレプリケートされることはありません。ディストリビューション データベースとサブスクライバー データベースを保護する場合は、TDE を個別に有効にする必要があります。スナップショット レプリケーションでは、トランザクション レプリケーションとマージ レプリケーションへの最初のデータ ディストリビューションと同様に、暗号化されていない中間ファイル (bcp ファイルなど) にデータを格納できます。 トランザクション レプリケーションまたはマージ レプリケーション時に、暗号化を有効にして通信チャネルを保護することができます。詳細については、「データベース エンジンへの暗号化接続を有効にする方法 (SQL Server 構成マネージャ)」を参照してください。

透過的なデータ暗号化と FILESTREAM データ

FILESTREAM データは TDE が有効になっている場合でも暗号化されません。