從舊版 適用於 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 版或舊版還原資料庫備份時,可能會遇到問題。

解決方案

  1. 將 SQL Server Connector for 金鑰保存庫 1.0.4.0 或舊版複製到sql2實例伺服器。

  2. 在伺服器上執行 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'
    
    1. 重新啟動 SQL Server。

    2. 使用 CRYPTOGRAPHIC PROVIDER 1.0.4.0 建立新的非對稱密鑰。

        CREATE ASYMMETRIC KEY TDE_KEY_1040 
        FROM PROVIDER AzureKeyVaultProvider 
        WITH PROVIDER_KEY_NAME = 'key1', 
        CREATION_DISPOSITION = OPEN_EXISTING
      
  3. 您可以使用下列查詢來確認這兩個非對稱金鑰是否存在:

    SELECT thumbprint,* FROM master.sys.asymmetric_keys
    
  4. 使用類似下列查詢的查詢,將認證新增至下列範例) 中的非對稱密鑰對應登入 (TDE_Login:

    ALTER LOGIN [Contoso\DomainUser] DROP CREDENTIAL sysadmin_ekm_cred; 
    ALTER LOGIN TDE_Login ADD CREDENTIAL sysadmin_ekm_cred;
    
  5. 您現在應該能夠還原備份。

  6. 在上 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'
    
  7. 重新啟動 SQL Server。

  8. 若要使用新的指紋,請使用相同的非對稱密鑰或新版本的非對稱密鑰來執行下列查詢。

    ALTER DATABASE ENCRYPTION KEY
    ENCRYPTION BY SERVER ASYMMETRIC KEY <KeyName_1.0.5.0_version>