Transparent Data Encryption (TDE)

適用対象: SQL Server (サポートされているすべてのバージョン) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Transparent data encryption (TDE) は、SQL Server、Azure SQL データベース、および Azure Synapse Analytics データ ファイルを暗号化します。 この暗号化は、保存データの暗号化として知られています。

ユーザー データベースをセキュリティで保護するために、次のような予防措置を講じてください。

  • セキュリティで保護されたシステムの設計。
  • 機密資産の暗号化。
  • データベース サーバーに対するファイアウォールの構築。

ただし、ドライブやバックアップ テープなどの物理メディアを盗む悪意のあるパーティは、データベースを復元またはアタッチし、そのデータを参照できます。

解決策の 1 つは、データベース内の機微なデータを暗号化し、証明書を使用して、データを暗号化するキーを保護することです。 この解決策により、キーを持たないユーザーによるデータの使用を防ぐことができます。 しかし、このような保護は事前に計画しておく必要があります。

TDE では、データとログ ファイルの I/O 暗号化とその解除をリアルタイムで行います。 暗号化では、データベース暗号化キー (DEK) が使用されます。 データベース ブート レコードでは、回復中に使用できるようにキーを格納します。 DEK は対称キーです。 これは、サーバー master のデータベースが格納する証明書、または EKM モジュールが保護する非対称キーによって保護されます。

TDE では、保存データ (データとログ ファイル) が保護されます。 これにより、ユーザーは多くの法律、規制、およびさまざまな業界で制定されたガイドラインに従うことになります。 この機能により、ソフトウェア開発者は、既存のアプリケーションを変更することなく、AES および 3DES 暗号化アルゴリズムを使用してデータを暗号化できます。

注意

システム データベースでは TDE を使用できません。 マスター、モデル、または msdbを暗号化するために使用することはできません。 tempdb は、ユーザー データベースが TDE を有効にしたときに自動的に暗号化されますが、直接暗号化することはできません。

TDE について

データベース ファイルの暗号化は、ページ レベルで行われます。 暗号化されたデータベースのページは、ディスクに書き込まれる前に暗号化され、メモリに読み込まれるときに暗号化解除されます。 TDE では、暗号化されたデータベースのサイズが増えることはありません。

SQL Database に該当する情報

Azure SQL Database で TDE を使用すると、データベースに格納されているサーバー レベルの証明書が自動的に作成SQL Databasemaster。 SQL Database で TDE データベースを移動する場合、移動操作のためにデータベースの暗号化を解除する必要はありません。 TDE と SQL Database の使用について詳しくは、Azure SQL Database と Transparent Data Encryption に関するページを参照してください。

SQL Server に該当する情報

データベースをセキュリティで保護した後、正しい証明書を使用して復元することができます。 証明書の詳細については、「 SQL Server Certificates and Asymmetric Keys」をご覧ください。

TDE を有効にした後、証明書とそれに関連する秘密キーをすぐにバックアップします。 証明書が使用できなくなった場合、または別のサーバーでデータベースを復元またはアタッチした場合は、証明書と秘密キーのバックアップが必要になります。 そうしないと、データベースを開くことができません。

データベースで TDE を無効にした場合でも、暗号化証明書は保持するようにしてください。 データベースは暗号化されていませんが、トランザクション ログの一部が保護されたままになる可能性があります。 また、データベースの完全バックアップを行うまで、一部の操作で証明書が必要になる場合があります。

有効期限の過ぎた証明書を引き続き使用して、TDE でデータを暗号化および暗号化解除することができます。

暗号化階層

Windows Data Protection API (DPAPI) は暗号化ツリーのルートにあり、マシン レベルでキー階層をセキュリティで保護し、データベース サーバー インスタンスのサービス マスター キー (SMK) を保護するために使用されます。 SMK は、ユーザー データベース レベルで格納されるデータベース マスター キー (DMK) を保護し、証明書と非対称キーを保護します。 これらのキーは、データを保護する対称キーを保護します。 TDE では、証明書に対して同様の階層が使用されます。 TDE を使用する場合は、DMK と証明書をデータベースに格納する master 必要があります。 TDE にのみ使用され、データベース暗号化キー (DEK) と呼ばれる新しいキーが作成され、ユーザー データベースに格納されます。

TDE 暗号化のアーキテクチャを次の図に示します。 SQL Database で TDE を使用する場合に、ユーザーが構成できるのは、データベース レベルの項目 (データベース暗号化キーと ALTER DATABASE の部分) のみとなります。

Transparent Database Encryption アーキテクチャ。

TDE を有効にする

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

適用対象: SQL Server

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

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

  3. データベース暗号化キーを作成し、証明書を使用して保護します。

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

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

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

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

注意事項

TDE が有効になっているデータベースのバックアップ ファイルも、データベース暗号化キーを使用して暗号化されます。 このため、これらのバックアップを復元するときには、データベース暗号化キーを保護する証明書を使用できる必要があります。 したがって、データベースをバックアップするだけでなく、必ず、サーバー証明書のバックアップを保持するようにしてください。 証明書が使用できなくなると、データの損失が発生します。

詳細については、「 SQL Server Certificates and Asymmetric Keys」をご覧ください。

コマンドと関数

次のステートメントで 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 権限が必要です。

考慮事項

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

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

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

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

重要

データベースを暗号化の対象として設定すると、フルテキスト インデックスが暗号化されます。 SQL Server 2008 より前の SQL Server バージョンで作成されたこのようなインデックスは、SQL Server 2008 以降でデータベースにインポートされ、TDE によって暗号化されます。

ヒント

データベースの TDE 状態の変更を監視するには、SQL Server Audit または SQL Database 監査を使用します。 SQL Server の場合、TDE は監査アクション グループ DATABASE_CHANGE_GROUP の下で追跡されます。これは「SQL Server 監査のアクション グループとアクション」で確認できます。

制限

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

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

  • データベースの削除

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

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

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

、、および ALTER DATABASE...SET ENCRYPTION ステートメントでは、次のCREATE DATABASE ENCRYPTION KEYALTER DATABASE ENCRYPTION KEYDROP DATABASE ENCRYPTION KEY操作は許可されません。

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

  • データベースの削除

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

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

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

  • ALTER DATABASE コマンドの使用

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

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

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

次の操作または条件により、、ALTER DATABASE ENCRYPTION KEYDROP DATABASE ENCRYPTION KEYおよび ALTER DATABASE...SET ENCRYPTION ステートメントがCREATE DATABASE ENCRYPTION KEY禁止されます。

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

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

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

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

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

  • データベース メンテナンス タスクが実行されている。

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

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

TDE スキャン

データベースで TDE を有効にするには、SQL Server で暗号化スキャンを行う必要があります。 スキャンによって、データ ファイルからバッファー プールに各ページが読み取られ、暗号化されたページがディスクに書き戻されます。

暗号化スキャンをより詳細に制御できるように、SQL Server 2019 (15.x) には、suspend および resume 構文を含む、TDE スキャンが導入されています。 システムのワークロードが大きい場合や、ビジネス クリティカルな時間に、スキャンを一時停止し、後でスキャンを再開することができます。

TDE 暗号化のスキャンを一時停止するには、次の構文を使用します。

ALTER DATABASE <db_name> SET ENCRYPTION SUSPEND;

同様に、TDE 暗号化のスキャンを再開するには、次の構文を使用します。

ALTER DATABASE <db_name> SET ENCRYPTION RESUME;

encryption_scan_state列が動的管理ビューに sys.dm_database_encryption_keys 追加されました。 暗号化スキャンの現在の状態が表示されています。 また、暗号化スキャンの状態が最後に変更された日時を含む、encryption_scan_modify_date という新しい列もあります。

暗号化スキャンが中断されている間にSQL Server インスタンスが再起動すると、起動時にエラー ログにメッセージが記録されます。 このメッセージは、既存のスキャンが一時停止されていることを示します。

重要

現在、TDE スキャン機能の一時停止および再開は、Azure SQL Database、Azure SQL Managed Instance、Azure Synapse Analytics では使用できません。

TDE とトランザクション ログ

データベースで TDE を使用できるようにすると、現在の仮想トランザクション ログの残りの部分が削除されます。 削除時に、次のトランザクション ログが強制的に作成されます。 この動作により、データベースが暗号化対象として設定された後にログにクリア テキストが残らないことが保証されます。

ログ ファイルの暗号化の状態を確認するには、この例のように、encryption_state ビューの sys.dm_database_encryption_keys 列を参照します。

USE AdventureWorks2012;
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 のログ ファイル アーキテクチャの詳細については、「トランザクション ログ (SQL Server)」を参照してください。

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

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

TDE と tempdb システム データベース

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

TDE とレプリケーション

レプリケーションでは、TDE が有効になっているデータベースのデータが暗号化された形式で自動的にレプリケートされることはありません。 ディストリビューションおよびサブスクライバー データベースを保護する場合は、TDE を個別に有効にします。

スナップショット レプリケーションでは、暗号化されていない中間ファイル (BCP ファイルなど) にデータを格納できます。 トランザクションおよびマージ レプリケーションの初期データ ディストリビューションも可能です。 このようなレプリケーション時に、暗号化を有効にして通信チャネルを保護することができます。

詳細については、「データベース エンジンへの暗号化接続の有効化 (SQL Server 構成マネージャー)」を参照してください。

TDE と可用性グループ

暗号化されたデータベースを可用性グループに追加できます。

可用性グループに含まれるデータベースを暗号化するには、プライマリ レプリカでデータベース暗号化キーを作成する前に、すべてのセカンダリ レプリカでマスター キーと証明書、または非対称キー (EKM) を作成します。

証明書がデータベース暗号化キー (DEK) の保護に使用されている場合、プライマリ レプリカで作成された証明書をバックアップし、すべてのセカンダリ レプリカでファイルから証明書を作成してからプライマリ レプリカでデータベース暗号化キーを作成します。

TDE と FILESTREAM データ

TDE を有効にした場合でも、FILESTREAM データは暗号化されません。

TDE とバックアップ

証明書は、データベース暗号化キー (DEK) を保護するために Transparent Data Encryption で一般的に使用されます。 証明書はデータベースに作成する master 必要があります。 TDE が有効になっているデータベースのバックアップ ファイルも、データベース暗号化キーを使用して暗号化されます。 その結果、これらのバックアップから復元する場合は、データベース暗号化キーを保護する証明書を使用できる必要があります。 つまり、データベースのバックアップに加えて、データの損失を防ぐために、サーバー証明書のバックアップを維持する必要があります。 証明書が使用できなくなると、データの損失が発生します。

TDE の削除

ALTER DATABASE ステートメントを使用してデータベースから暗号化を削除します。

ALTER DATABASE <db_name> SET ENCRYPTION OFF;

データベースの状態を表示するには、sys.dm_database_encryption_keys 動的管理ビューを使います。

暗号化の解除が完了するまで待機し、その後、DROP DATABASE ENCRYPTION KEY でデータベース暗号化キーを削除します。

重要

TDE に使用されているマスター キーと証明書を安全な場所にバックアップします。 データベースが TDE で暗号化されたときに取得されたバックアップを復元するには、マスター キーと証明書が必要です。 データベース暗号化キーを削除したら、ログをバックアップし、それから復号されたデータベースの完全なバックアップを新しく作成します。

TDE とバッファー プール拡張機能

TDE を使用してデータベースを暗号化する場合、バッファー プール拡張機能 (BPE) に関連するファイルは暗号化されません。 これらのファイルについては、ファイル システム レベルで BitLocker や EFS などの暗号化ツールを使用します。

TDE とインメモリ OLTP

インメモリ OLTP オブジェクトを含むデータベースで、TDE を有効にすることができます。 SQL Server 2016 (13.x) と Azure SQL データベース では、TDE を有効した場合、インメモリ OLTP ログ レコードとデータが暗号化されます。 SQL Server 2014 (12.x) では、TDE を有効した場合、インメモリ OLTP ログ レコードは暗号化されますが、MEMORY_OPTIMIZED_DATA ファイル グループのファイルは暗号化されません。

TDE で使用される証明書の管理に関するガイドライン

証明書とデータベース マスター キーのバックアップは、データベースが TDE に対して有効になっており、ログ配布またはデータベース ミラーリングで使用されている場合に必要です。

また、データベース暗号化キーを保護するために使用される証明書をデータベースから master 削除しないようにすることも重要です。 これにより、暗号化されたデータベースにアクセスできなくなります。

コマンドで使用されている証明書がまだバックアップされていない場合は、 Create Database Encryption Key を実行した後に、次のような警告メッセージが発生します。

データベース暗号化キーの暗号化に使用される証明書はバックアップされていません。 証明書および証明書に関連付けられた秘密キーをすぐにバックアップしてください。 証明書が使用できなくなった場合、またはデータベースを別のサーバーに復元またはアタッチする必要がある場合は、証明書と秘密キーの両方のバックアップが必要です。または、データベースを開くことができません。

次のクエリを使用して、TDE で使用された証明書が作成された時点からバックアップされていない証明書を識別できます。

SELECT pvt_key_last_backup_date,
    Db_name(dek.database_id) AS encrypteddatabase ,c.name AS Certificate_Name
FROM sys.certificates c
    INNER JOIN sys.dm_database_encryption_keys dek
    ON c.thumbprint = dek.encryptor_thumbprint

pvt_key_last_backup_date が NULL の場合、その行に対応するデータベースは TDE に対して有効になっていますが、その DEK の保護に使用される証明書はバックアップされていません。 証明書のバックアップの詳細については、「オンライン ブックのバックアップ証明書SQL Server参照してください。

関連項目