使用this MS article中详述的步骤,我已成功启用了使用Azure作为EKM的SQL TDE。为了确保在DR方案中我能够解密另一台服务器上的数据,我首先按照{{3}将我自己的非对称密钥(以密码保护的pfx文件的形式)上传到Key Vault中。 }}
我现在正在尝试测试DR,我必须将加密数据库的备份恢复到另一台SQL服务器上,无论我尝试什么,我都无法让它工作。对于那些熟悉SQL加密的人来说,我确信这是一件非常明显的事情,但这让我感到难过!
我已阅读各种文章,例如steps in this MS article,解释如何转换,然后使用PVKConverter.exe导入pfx证书。最初,尝试导入转换后的pfx会引发错误消息15581,级别16,状态1,行1.请在执行此操作之前在数据库中创建主密钥或在会话中打开主密钥。所以我使用
在主数据库中创建了一个CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'MySecurePassword'
这并没有让我更进一步,因为备份仍无法恢复。
比较两台服务器,明显不同的是主数据库在加密的服务器A(SELECT * FROM sys.asymmetric_keys
)中保存了我的密钥保管库链接的非对称密钥,在服务器B中保存了证书(SELECT * FROM sys.certificates
)。我知道我无法从SQL导出非对称密钥(因此我使用了密钥保管库中的现有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