从旧版用于 Microsoft Azure Key Vault 的 SQL Server 连接器还原备份时出现错误 33111
原始 KB 数: 4470999
本文讨论尝试还原使用旧版 SQL Server 连接器Microsoft Azure 密钥库的服务器上的透明数据加密(TDE)备份时发生的错误。
现象
尝试从使用 SQL Server Connector 密钥库 1.0.4.0 或更低版本的 SQL Server 还原数据库备份以用于 Microsoft Azure Key Vault 的 SQL Server 连接器 1.0.5.0 时遇到问题。
假设部署以下 Microsoft SQL Server 实例:
SQL Server 实例
sql1
部署了 密钥库 1.0.4.0 的 SQL Server 连接器。SQL Server 实例
sql2
部署了 密钥库 1.0.5.0 的 SQL Server 连接器。使用以下查询在密钥库中从同一非对称密钥源和实例上
sql1
sql2
部署非对称密钥:CREATE ASYMMETRIC KEY TDE_KEY FROM PROVIDER AzureKeyVaultProvider WITH PROVIDER_KEY_NAME = 'key1', CREATION_DISPOSITION = OPEN_EXISTING
如果查看两台服务器上的指纹值,你会注意到指纹长度不同,尽管它们是从同一源创建的。 版本 1.0.5.0 指纹长于版本 1.0.4.0。
1.0.4.0 指纹的示例:
0x2C5677D76F76D77F80
1.0.5.0 指纹的示例:
0x373B314B78E8D59A0925494558FEF14B726216C5
更改会导致备份和还原操作期间出现问题。
示例:
你有一个数据库备份,该备份由实例中密钥库中的sql1
非对称密钥加密。
实例 sql2
已创建非对称密钥。
如果尝试在实例上 sql2
还原备份,操作将失败,并返回类似于以下消息的错误消息:
Msg 33111、Level 16、State 4、LineNumber <>
找不到指纹为“0x2C5677D76F76D77F80”的服务器非对称密钥。
注意:
检索每个密钥指纹的查询如下所示:
SELECT thumbprint, * FROM master.sys.asymmetric_keys
检索每个 TDE 数据库的指纹的查询如下所示:
SELECT DatabaseName(ddek.database_id) AS DatabaseName, ak.name
AS [Asymmetric key Name], ak.thumbprint FROM
sys.dm_database_encryption_keys ddek INNER JOIN
master.sys.asymmetric_keys ak ON
ak.thumbprint = ddek.encryptor_thumbprint
原因
SQL Server Connector 版本 1.0.5.0 中引入了更新,用于密钥库更改程序计算指纹的方式。 在版本 1.0.5.0 中,此计算与程序引擎用于支持以下迁移方案的逻辑匹配:
来源:使用可扩展密钥管理的本地Microsoft SQL Server (EKM)
若要:Microsoft Azure SQL 数据库使用“自带密钥”(BYOK)支持透明数据加密(TDE)
由于此更改,尝试从版本 1.0.4.0 或更低版本还原数据库备份时可能会遇到问题。
解决方法
将适用于 密钥库 1.0.4.0 或更低版本的 SQL Server 连接器复制到
sql2
实例服务器。在
sql2
服务器上运行以下查询以更改为CRYPTOGRAPHIC PROVIDER
版本 1.0.4.0:ALTER CRYPTOGRAPHIC PROVIDER AzureKeyVaultProvider FROM FILE = 'FilePath\FileName\SQL Server Connector for Microsoft Azure Key Vault\1.0.4.0\Microsoft.AzureKeyVaultService.EKM.dll'
请重新启动 SQL Server。
使用
CRYPTOGRAPHIC PROVIDER
1.0.4.0 创建新的非对称密钥。CREATE ASYMMETRIC KEY TDE_KEY_1040 FROM PROVIDER AzureKeyVaultProvider WITH PROVIDER_KEY_NAME = 'key1', CREATION_DISPOSITION = OPEN_EXISTING
可以使用以下查询确认这两个非对称密钥是否存在:
SELECT thumbprint,* FROM master.sys.asymmetric_keys
使用类似于以下查询的查询将凭据添加到非对称密钥映射登录名(以下示例中的TDE_Login):
ALTER LOGIN [Contoso\DomainUser] DROP CREDENTIAL sysadmin_ekm_cred; ALTER LOGIN TDE_Login ADD CREDENTIAL sysadmin_ekm_cred;
现在应该能够还原备份。
运行以下查询
sql2
以还原CRYPTOGRAPHIC PROVIDER
到版本 1.0.5.0:ALTER CRYPTOGRAPHIC PROVIDER AzureKeyVaultProvider FROM FILE = 'FilePath\FileName\SQL Server Connector for Microsoft Azure Key Vault\1.0.5.0\Microsoft.AzureKeyVaultService.EKM.dll'
请重新启动 SQL Server。
若要使用新的指纹,请使用相同的非对称密钥或新版本非对称密钥运行以下查询。
ALTER DATABASE ENCRYPTION KEY ENCRYPTION BY SERVER ASYMMETRIC KEY <KeyName_1.0.5.0_version>