從舊版 適用於 Microsoft Azure Key Vault 的 SQL Server 連接器 還原備份時發生錯誤 33111
原始 KB 編號: 4470999
本文討論當您嘗試還原 TDE (透明數據加密時所發生的錯誤,) 針對 Microsoft Azure 金鑰保存庫 使用舊版 SQL Server 連接器的伺服器上所做的備份。
徵狀
當您嘗試從使用 SQL Server Connector for SQL Server 金鑰保存庫 1.0.4.0 或舊版的 適用於 Microsoft Azure Key Vault 的 SQL Server 連接器 1.0.5.0 還原資料庫備份時,遇到問題。
假設您部署下列 Microsoft SQL Server 實例:
SQL Server 實例
sql1
已部署 SQL Server Connector for 金鑰保存庫 1.0.4.0。SQL Server 實例
sql2
已部署 SQL Server Connector for 金鑰保存庫 1.0.5.0。使用下列查詢,從 金鑰保存庫 中相同非對稱密鑰來源的 和
sql2
實例上sql1
部署非對稱密鑰: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, Line <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 版中,此計算符合程式引擎用來支援下列移轉案例的邏輯:
寄件者:使用可延伸密鑰管理 (EKM) 的內部部署 Microsoft SQL Server
至:使用自備金鑰 (BYOK 的 Microsoft Azure SQL 資料庫) 支援透明數據加密 (TDE)
由於這項變更,當您嘗試從 1.0.4.0 版或舊版還原資料庫備份時,可能會遇到問題。
解決方案
將 SQL Server Connector for 金鑰保存庫 1.0.4.0 或舊版複製到
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>