SQLデータベースを暗号化するために、次のコマンドを実行します。
CREATE CERTIFICATE <certname> ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>'
WITH SUBJECT = 'certificate subject', EXPIRY_DATE = '20291031';
go
USE <databasetoencrypt>;
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE <certname>;
GO
CREATE DATABASE ENCRYPTION KEY
コマンドを実行しようとすると、次のメッセージが表示され、何をすべきかわかりません。
証明書 'name'を使用できません。プライベートキーが存在しないか、データベースマスターキーによって保護されていないためです。 SQL Serverでは、この操作に使用される証明書の秘密キーに自動的にアクセスする機能が必要です。
ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>'
コマンドの実行中にCREATE CERTIFICATE
を省略しても機能します。ただし、パスワードで保護された証明書を作成する必要があります。
何か考えはありますか?!ありがとうございました。
SQL Serverはデータベースを開くことができないため、パスワードで保護された証明書を作成し、その証明書を使用してTDE経由でデータベースを暗号化することはできません。
から Microsoft Docs :
透過的データ暗号化(TDE)は、データベース暗号化キーと呼ばれる対称キーを使用する必要があります。これは、マスターデータベースのデータベースマスターキーで保護された証明書、またはEKMに保存された非対称キーで保護されています。
TDEを使用してデータベースを暗号化する手順:
マスターキーを作成する
マスターキーで保護された証明書を作成または取得する
データベース暗号化キーを作成し、証明書で保護します
暗号化を使用するようにデータベースを設定する
TDEのMicrosoft Docsページ から取得した上記の例:
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_128
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
GO
ALTER DATABASE AdventureWorks2012
SET ENCRYPTION ON;
GO
そのページはこれも言っています:
TDE証明書は、次のステートメントで受け入れられるように、データベースマスターキーで暗号化する必要があります。パスワードのみで暗号化されている場合、ステートメントはそれらを暗号化として拒否します。
CREATE DATABASE ENCRYPTION KEY
ALTER DATABASE ENCRYPTION KEY
DROP DATABASE ENCRYPTION KEY
証明書をTDEで使用した後にパスワードで保護するように変更すると、再起動後にデータベースにアクセスできなくなります。