2

使用这篇 MS 文章中详述的步骤,我已经成功地启用了使用 Azure 作为 EKM 的 SQL TDE。为了确保在发生 DR 场景时能够解密另一台服务器上的数据,我首先按照本文中的步骤将我自己的非对称密钥(以受密码保护的 pfx 文件的形式)上传到 Key Vault女士文章

我现在正在尝试测试 DR,我必须将加密数据库的备份还原到另一个 SQL 服务器上,无论我尝试什么,我都无法让它工作。我敢肯定,对于那些熟悉 SQL 加密的人来说,这是一件非常明显的事情,但这让我很困惑!

我已经阅读了各种文章,例如这篇文章,解释了如何使用 PVKConverter.exe 转换然后导入 pfx 证书。最初,尝试导入转换后的 pfx 时抛出错误Msg 15581, Level 16, State 1, Line 1。请在执行此操作之前在数据库中创建主密钥或在会话中打开主密钥。所以我在主数据库中创建了一个使用

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'MySecurePassword'

这并没有让我更进一步,因为备份仍然无法恢复。

比较两台服务器,明显的区别是主数据库在加密的服务器 A ( SELECT * FROM sys.asymmetric_keys) 中保存我的 Key Vault 链接的非对称密钥,在服务器 B ( ) 中保存一个证书SELECT * FROM sys.certificates。我知道我无法从 SQL 导出非对称密钥(因此我在 Key Vault 中使用了现有的 pfx),但我只是不知道如何在服务器 B 中使用/导入该 pfx 以允许我恢复加密的数据库从服务器 A 备份。每当我尝试使用以下命令从我的 pfx 文件在主数据库中创建非对称密钥时:

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'

我收到错误消息:Msg 15208, Level 16, State 43, Line 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
4

0 回答 0