透過的なデータ暗号化 (TDE)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Transparent Data Encryption (TDE) によって、SQL Server、Azure SQL Database、Azure Synapse Analytics のデータ ファイルが暗号化されます。 この暗号化は、保存データの暗号化として知られています。

データベースをセキュリティで保護するには、次のような対策を講じることができます。

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

ただし、悪意のあるユーザーがドライブやバックアップ テープなどの物理メディアを盗み、データベースを復元またはアタッチし、そのデータを閲覧する場合があります。

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

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

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

Note

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

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

関連トピック:

TDE について

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

SQL Database に適用される情報

TDE を Azure SQL Database で使用すると、master データベースに格納されるサーバー レベルの証明書が SQL Database によって自動的に作成されます。 SQL Database 上の TDE データベースを移動する場合、移動操作のためにデータベースの暗号化を解除する必要はありません。 SQL Database で TDE を使用する方法の詳細情報は、「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 の部分) のみとなります。

Diagram showing the transparent data encryption architecture.

TDE を有効にする

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

適用対象: SQL Server

  1. マスター キーを作成します。
  2. マスター キーで保護された証明書を作成または取得します。
  3. データベース暗号化キーを作成し、証明書を使用して保護します。
  4. 暗号化を使用するようにデータベースを設定します。

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

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

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

注意

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

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

コマンドと関数

次のステートメントで TDE 証明書を受け入れるには、データベース マスター キーを使用して証明書を暗号化します。 それらをパスワードのみを使用して暗号化した場合、ステートメントでは暗号化機能として受け付けられません。

重要

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

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

コマンドまたは関数 目的
CREATE DATABASE ENCRYPTION KEY データベースを暗号化するキーを作成します
ALTER DATABASE ENCRYPTION KEY データベースを暗号化するキーを変更します
DROP DATABASE ENCRYPTION KEY データベースを暗号化するキーを削除します
ALTER DATABASE の SET オプション TDE を有効にするために使用される ALTER DATABASE オプションについて説明します

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

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

カタログ ビューまたは動的管理ビュー 目的
sys.databases データベース情報を表示するカタログ ビュー
sys.certificates データベース内の証明書を表示するカタログ ビュー
sys.dm_database_encryption_keys データベースの暗号化キーと暗号化の状態に関する情報を提供する動的管理ビュー

アクセス許可

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

TDE に関係するメタデータを表示するには、証明書に対する VIEW DEFINITION 権限が必要です。

考慮事項

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

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

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

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

重要

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

ヒント

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

制限事項

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

  • データベース内のファイル グループからのファイルの削除
  • データベースの削除
  • データベースのオフライン化
  • データベースのデタッチ
  • データベースまたはファイル グループの READ ONLY 状態への移行

CREATE DATABASE ENCRYPTION KEYALTER DATABASE ENCRYPTION KEYDROP DATABASE ENCRYPTION KEYALTER DATABASE...SET ENCRYPTION ステートメント中は、次の操作は許可されません。

  • データベース内のファイル グループからのファイルの削除
  • データベースの削除
  • データベースのオフライン化
  • データベースのデタッチ
  • データベースまたはファイル グループの READ ONLY 状態への移行
  • ALTER DATABASE コマンドの使用。
  • データベースまたはデータベース ファイルのバックアップの開始
  • データベースまたはデータベース ファイルの復元の開始
  • スナップショットの作成

次の操作または条件により、CREATE DATABASE ENCRYPTION KEYALTER DATABASE ENCRYPTION KEYDROP DATABASE ENCRYPTION KEYALTER DATABASE...SET ENCRYPTION ステートメントが使用できなくなります。

  • データベースが読み取り専用であるか、読み取り専用のファイル グループを含んでいる。
  • ALTER DATABASE コマンドが実行されています。
  • データ バックアップが実行されている。
  • データベースがオフラインまたは復元中である。
  • スナップショットが実行されている。
  • データベース メンテナンス タスクが実行されている。

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

非対称キーで DEK を暗号化するには、その非対称キーが拡張キー管理プロバイダーにある必要があります。

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 は、保存されているデータ ファイルとログ ファイルを保護します。 暗号化されていないデータベースで TDE を有効にした後にデータベース全体を暗号化することは、大量のデータ操作であり、それにかかる時間は、このデータベースが実行されているシステム リソースによって異なります。 sys.dm_database_encryption_keys DMV を使用して、データベースの暗号化状態を測定できます。

TDE をオンにすると、データベース エンジンは新しいトランザクション ログの作成を強制します。このログはデータベース暗号化キーによって暗号化されます。 以前のトランザクション、または TDE 状態の変更間でインターリーブされた現在の長期のトランザクションによって生成されたログは暗号化されません。

トランザクション ログは、sys.dm_db_log_info DMV を使用して監視できます。また、これにより、Azure SQL および SQL Server 2019 (15.x) 以降のバージョンでは vlf_encryptor_thumbprint 列を使用して、ログファイルが暗号化されているかどうかがわかります。 また、encryption_state ビュー内の sys.dm_database_encryption_keys 列を使用して、ログ ファイルの暗号化の状態を確認できます。クエリ例を示します。

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

DEK が変更される前に、前の DEK はトランザクション ログに書き込まれたすべてのデータを暗号化します。

DEK を 2 回変更する場合は、DEK を再度変更する前にログ バックアップを実行する必要があります。

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

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

TDE とレプリケーション

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

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

詳細については、「接続を暗号化するために SQL Server データベース エンジンを構成する」を参照してください。

TDE と可用性グループ

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

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

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

TDE と FILESTREAM データ

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

TDE とバックアップ

証明書は一般に、Transparent Data Encryption で DEK を保護するために使用されます。 証明書は master データベースに作成する必要があります。 TDE が有効になっているデータベースのバックアップ ファイルも、DEK を使用して暗号化されます。 このため、このバックアップを復元するときには、DEK を保護している証明書が必要です。 つまり、データの損失を防ぐには、データベースをバックアップするだけでなく、サーバー証明書のバックアップも確実に保守する必要があります。 証明書が使用できなくなると、データの損失が発生します。

TDE の削除

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

ALTER DATABASE <db_name> SET ENCRYPTION OFF;

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

暗号化の解除が終了するまで待機し、その後、DROP DATABASE ENCRYPTION KEY を使用して DEK を削除します。

重要

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

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

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

TDE とインメモリ OLTP

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

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

TDE でデータベースが有効になっており、ログ配布またはデータベース ミラーリングで使用されている場合は、証明書とデータベース マスター キーをバックアップする必要があります。 包含システム データベースに格納されている証明書もバックアップする必要があります。

DEK の保護に使用される証明書を master データベースから削除しないでください。 そうすると、暗号化されたデータベースにアクセスできなくなります。

コマンドで使用されている証明書がまだバックアップされていない場合、CREATE DATABASE ENCRYPTION KEY の実行後に次のようなメッセージ (エラー 33091) が発生します。

警告

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

次のクエリを使用して、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_dateNULL の場合、その行に対応するデータベースは TDE に対して有効になっていますが、その DEK を保護するために使用される証明書はバックアップされていません。 証明書のバックアップの詳細については、「証明書のバックアップ」を参照してください。