お疲れ様です!SQLServer で透過的なデータ暗号化 (TDE)を使ってデータファイルの暗号化をやってみます。
目次
参考
透過的なデータ暗号化 (TDE) – SQL Server | Microsoft Docs の TDE を有効にする
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だと暗号化も証明書のローテーションとか出来るだろうし、クラウド使うなら設定してお任せの方が楽でしょうね。