この MS 記事で説明されている手順を使用して、Azure を EKM として使用して SQL TDE を正常に有効にしました。DR シナリオが発生した場合に別のサーバーでデータを復号化できるようにするために、まず、この手順に従って、自分の非対称キー (パスワードで保護された pfx ファイルの形式) を Key Vault にアップロードしました。 MS記事。
現在、DR をテストしようとしています。暗号化された DB のバックアップを別の SQL サーバーに復元する必要がありますが、何を試しても動作しません。SQL 暗号化に精通している人にとっては痛々しいほど明白なことだと思いますが、私は困惑しました!
PVKConverter.exe を使用して pfx 証明書を変換してインポートする方法を説明するこの記事など、さまざまな記事を読みました。最初に、変換された pfx をインポートしようとすると、エラーメッセージ 15581、レベル 16、状態 1、行 1 がスローされました。この操作を実行する前に、データベースでマスター キーを作成するか、セッションでマスター キーを開いてください。だから私は使用してマスターDBに作成しました
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'MySecurePassword'
バックアップがまだ復元されないため、これ以上はうまくいきませんでした。
2 つのサーバーを比較すると、明らかな違いは、マスター DB が Key Vault にリンクされた非対称キーを暗号化されたサーバー A ( SELECT * FROM sys.asymmetric_keys
) に保持し、証明書をサーバー B ( SELECT * FROM sys.certificates
) に保持していることです。SQL から非対称キーをエクスポートできないことは理解しています (したがって、Key Vault で既存の pfx を使用しました) が、サーバー B でその pfx を使用/インポートして、暗号化された DB を復元できるようにする方法がわかりません。サーバーAからバックアップします。以下を使用して、pfxファイルからマスターDBに非対称キーを作成しようとするたびに:
CREATE ASYMMETRIC KEY MY_ASYMMETRIC_KEY
FROM FILE = 'C:\Program Files\Microsoft SQL Server\MSSQL12.CORIC\MSSQL\DATA\\MyPFXFile.pfx'
ENCRYPTION BY PASSWORD 'C0mplexP@ssw0rd'
次のエラーが表示されます:メッセージ 15208、レベル 16、状態 43、行 18 証明書、非対称キー、または秘密キー ファイルが有効でないか、存在しません。または権限がありません。
サーバー A で TDE を有効にするために使用される完全な SQL を以下に示します。これにより、問題を特定するために必要な洞察が得られることを願っています。
USE master;
GO
sp_configure 'show advanced options', 1 ;
GO
RECONFIGURE ;
GO
sp_configure 'EKM provider enabled', 1 ;
GO
RECONFIGURE ;
GO
CREATE CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov
FROM FILE = 'C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault\Microsoft.AzureKeyVaultService.EKM.dll';
GO
CREATE CREDENTIAL sysadmin_ekm_cred
WITH IDENTITY = 'mykeyvault',
SECRET = '12345678123412341234123456789abcfedcba98-fedc-fedc-fedc-fedcba987654'
FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov
ALTER LOGIN [LOCALMACHINE\AdminUser]
ADD CREDENTIAL sysadmin_ekm_cred;
CREATE ASYMMETRIC KEY KEY_VAULT_ASYMMETRIC
FROM PROVIDER [AzureKeyVault_EKM_Prov]
WITH PROVIDER_KEY_NAME = 'mykeyvaultkeyname',
CREATION_DISPOSITION = OPEN_EXISTING
CREATE CREDENTIAL Azure_EKM_TDE_cred
WITH IDENTITY = 'mykeyvault',
SECRET = '12345678123412341234123456789abcfedcba98-fedc-fedc-fedc-fedcba987654'
FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov
CREATE LOGIN TDE_Login
FROM ASYMMETRIC KEY KEY_VAULT_ASYMMETRIC
ALTER LOGIN TDE_Login
ADD CREDENTIAL Azure_EKM_TDE_cred ;
USE MyDatabase;
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER ASYMMETRIC KEY KEY_VAULT_ASYMMETRIC
ALTER DATABASE MyDatabase
SET ENCRYPTION ON ;
GO