お疲れ様です!SQLServer で透過的なデータ暗号化 (TDE)を使ってデータファイルの暗号化をやってみます。

参考

透過的なデータ暗号化 (TDE) – SQL Server | Microsoft DocsTDE を有効にする

Master 設定

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

USE master;
GO

CREATE MASTER KEY ENCRYPTION
BY PASSWORD = 'マスターキーのパスワード';
GO

  • 「マスターキーのパスワード」の部分を変更してください。

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

USE master;
GO

CREATE CERTIFICATE XXXXXXXXXX
WITH SUBJECT = 'My Server Certificate',
EXPIRY_DATE = 'yyyyMMdd';
GO

  • 「XXXXXXXXXX」の部分を証明書の名称に変更してください。
  • 「My Server Certificate」の部分は公開鍵の識別名に変更してください。
  • 「yyyyMMdd」の部分はいつまで有効にするか指定してください。省略すると作成日から1年となります。

参考: CREATE CERTIFICATE (Transact-SQL) – SQL Server | Microsoft Docs

3. 作成した証明書を確認します。

USE master;
GO

SELECT *
FROM sys.certificates
GO

データベース設定

1. 上記で作成した証明書を使用してデータベース暗号化キーを作成します。

USE 対象データベース名;
GO

CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE XXXXXXXXXX;
GO

  • 「XXXXXXXXXX」はMaster設定で付けた証明書の名称に変更してください。

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

USE 対象データベース名;
GO

ALTER DATABASE 対象データベース名
SET ENCRYPTION ON;
GO

  • 「対象データベース名」を変更してください。

3. 暗号化が完了したか確認する

SELECT DB_NAME(T1.database_id) dbName, T2.name certificates_name, T1.*
FROM sys.dm_database_encryption_keys T1
    JOIN sys.certificates T2
      ON T2.thumbprint = T1.encryptor_thumbprint
WHERE encryption_state = 3;
GO

秘密キー,公開キーのバックアップ

他のサーバーへ復元するときなどは作成した証明書をファイルへ出力します。

USE master;
GO

BACKUP CERTIFICATE XXXXXXXXXX
    TO FILE = 'C:\MSSQL\Cert\DB名.インスタンス名.cer'
    WITH PRIVATE KEY
    (FILE = 'C:\MSSQL\Cert\DB名.インスタンス名.pvk',
    ENCRYPTION BY PASSWORD = 'ファイルへのパスワード')

  • 「XXXXXXXXXX」はMaster設定で付けた証明書の名称に変更してください。
  • 「C:\MSSQL\Cert\DB名.インスタンス名.cer」を保存先に合わせて変更してください。
  • 「C:\MSSQL\Cert\DB名.インスタンス名.pvk」を保存先に合わせて変更してください。
  • 「ファイルへのパスワード」を変更してください。このパスワードは復元するときに必要になります。

SSMS で設定

データベース設定 の設定は SQLServer Management Studio でもできます。

対象データベースの右クリックメニュー「タスク」「データベース暗号化の管理」を実行

各項目を入力してOKで暗号化されます。

暗号化アルゴリズム : AES 256
サーバー証明書の使用 : Master 設定で作成した証明書名
データベース暗号化をオンに設定 : ✔

マスターキーの管理、証明書バックアップの保管など、どうするかが課題のような気がします。
AWSのRDSだと暗号化も証明書のローテーションとか出来るだろうし、クラウド使うなら設定してお任せの方が楽でしょうね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*