從舊版適用於 Microsoft Azure Key Vault 的 SQL Server 連接器還原備份時,發生錯誤 33111
原始 KB 編號: 4470999
本文討論當您嘗試還原使用舊版 SQL Server Connector Microsoft Azure 金鑰保存庫 之伺服器上所建立 透明資料加密 (TDE) 備份時所發生的錯誤。
徵兆
當您嘗試從使用 SQL Server Connector for 金鑰保存庫 1.0.4.0 或舊版的 SQL Server 還原資料庫備份,以 適用於 Microsoft Azure Key Vault 的 SQL Server 連接器 1.0.5.0 時發生問題。
假設您部署下列 sql Server 實例Microsoft:
SQL Server 實例
sql1
已部署適用於 金鑰保存庫 1.0.4.0 的 SQL Server 連接器。SQL Server 實例
sql2
已部署適用於 金鑰保存庫 1.0.5.0 的 SQL Server 連接器。使用下列查詢,在 金鑰保存庫 中,從相同非對稱密鑰來源的 和
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 版中,此計算符合程式引擎用來支援下列移轉案例的邏輯:
來源:使用可延伸金鑰管理的內部部署Microsoft SQL Server (EKM)
若要:Microsoft Azure SQL 資料庫 使用攜帶您自己的金鑰 (BYOK) 支援 透明資料加密 (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>