SQL ServerにおけるTDEについて

TDEと呼ばれるものをご存じでしょうか。

TDEとはTransparent Data Encryptionの略で、日本語だと透過的データベース暗号化と言われており、簡単に言うとデータベースのデータを暗号化して保護する機能になります。

データベースには企業のさまざまな機密情報が格納されていますが、情報漏洩や不正アクセスなどのセキュリティ事故の危険にさらされています。

そのためデータベースでもセキュリティ対策を行う必要があります。

今回はセキュリティ対策の一つであるTDEの説明と、実際の設定手順をSQL Serverを使って説明させていただきます

TDEとは

繰り返しになりますがTDEとは、Transparent Data Encryptionの略で、透過的データベース暗号化のことを指します。

透過的とは「存在を意識することなく使える」という意味で、暗号化や復号化を意識することなく、データの暗号化を扱うことができる機能です。

例えば、データベースにデータを挿入するときに、ディスクに書き込みしようとしたタイミングでそのデータを暗号化して保存します。一方で、そのデータを取り出そうとしたときはメモリに読みだされるタイミングで復号化をします。

このように「データを暗号化・復号化する」という流れを、ユーザー側で意識する必要がなくなる機能がTDEになります。

TDEのメリット

TDEを使うメリットは以下の通りです。

  • 世界標準のAESによって暗号化されており、セキュリティリスクを最小限に抑えられ、安全性が高いです。
  • 設定をすると暗号化と復号が自動で行われ、ユーザー側で作業をする手間が少なく済みます。
  • アプリケーションなどで暗号化を行う場合、アプリケーション側で暗号化や復号化に対応しなければなりませんが、TDEは自身に出入りするデータを自動で暗号化します。アプリケーション側では暗号化処理を一切行う必要ありません。

設定方法

今回はTDEの実際の設定手順をSQL Serverを使用した場合で紹介したいと思います。

  1. SQL Server Management Studio(SSMS)に接続し、以下のクエリを実施し、サービスマスターキーが存在していることを確認します。
    ※サービスマスターキーはSQL Serverインストール時にデフォルトで作成されているオブジェクトになります。

    クエリ:
    SELECT * FROM sys.symmetric_keys WHERE name = '##MS_ServiceMasterKey##’;

  2.  以下のクエリを実施し、マスターキーが存在していることを確認します。
    ※マスターキーはSQL Serverインストール時にデフォルトで作成されているオブジェクトになります。

    クエリ:
    SELECT * FROM sys.symmetric_keys WHERE name = '##MS_DatabaseMasterKey##';

  3. 以下クエリを実施し、マスターキーで保護された証明書を作成し、作成されたことを確認します。
    ※masterデータベースから実行

    クエリ:
    CREATE CERTIFICATE [証明書の名前] WITH SUBJECT = 'DataCertificate';
    SELECT * FROM sys.certificates WHERE name = '[証明書の名前]';

  4. 以下クエリを実施し、証明書のバックアップと証明書に使用する秘密鍵の作成と、秘密鍵のパスワード指定をします。
    ※masterデータベースから実行
    ※証明書が消失するとデータを復号できないため、別のディスクやサーバーに保管を推奨

    クエリ:
    BACKUP CERTIFICATE [証明書の名前] TO FILE = '[証明書のバックアップ先]' WITH PRIVATE KEY (FILE = '[秘密鍵のバックアップ先]', ENCRYPTION BY PASSWORD = '[秘密鍵のパスワード]’);

  5. 以下クエリを実施し、データベース暗号化キーを作成し、手順3で作成した証明書で保護します。
    ※ユーザーデータベースから実行

    クエリ:
    CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER CERTIFICATE [証明書の名前];

  6. 以下クエリを実施し、TDEを有効にします。
    ※ユーザーデータベースから実行

    クエリ:
    ALTER DATABASE [データベース名] SET ENCRYPTION ON;

  7. 以下クエリを実施し、TDEが有効になっていることを確認します。
    クエリ:
    SELECT DB_NAME(database_id) as DBNAME, encryption_state FROM [sys].[dm_database_encryption_keys]

    TDEの設定状況は「encryption_state」の項目内の数字にて表示されます。
    各数字のTDEの設定状況は以下になります。
    0:データベース暗号化キーが存在していない状態で、暗号化は行われません。
    1:暗号化がされていない状態です。
    2:暗号化が進行中の状態です。
    3:暗号化設定が完了している状態です。
    4:暗号化キーが変更中の状態です
    5:暗号化を解除中の状態です。
    6:保護の変更が進行中です。 (データベース暗号化キーを暗号化している証明書または非対称キーが変更されています。)
    ※参考:

    sys.dm_database_encryption_keys (Transact-SQL) - SQL Server | Microsoft Learn

解除方法

TDEの設定を解除するには以下のクエリを実行します。

クエリ:

ALTER DATABASE [データベース名] SET ENCRYPTION OFF;

注意点

  • Enterprise Editionのみ対応となっています。
  • DB内部で暗号化・復号化の処理が行われる都合上、TDE未設定時よりTDE設定時のほうがパフォーマンスが低下する場合があります。
  • 暗号化するデータベースのデータ量が大きいとすぐに暗号化できず、暗号化完了まで数時間~数日かかる場合があります。

さいごに

今回はTDEについてと、SQL Server上でのTDEの設定について説明させていただきました。

SQL Serverに限らず、ほかのデータベース製品でも、もちろんTDEの設定は可能です。

他のデータベース製品でのTDEの設定手順についても機会があれば紹介できればなと思います。

執筆担当者プロフィール
髙野 翼

髙野 翼(日本ビジネスシステムズ株式会社)

ハイブリッドクラウド本部所属。 SQL ServerやPostgreSQLを中心としたデータベースの設計・構築に携わっています。

担当記事一覧