將受 TDE 保護資料庫的憑證移轉到 Azure SQL 受控執行個體

適用於:Azure SQL 受控執行個體

當您使用原生還原選項,將受到透明資料加密 (TDE) 保護的資料庫遷移到 Azure SQL 受控執行個體時,來自 SQL Server 執行個體的對應憑證必須在資料庫還原之前進行遷移。 本文將逐步引導您完成將憑證手動移轉至 Azure SQL 受控執行個體的程序:

  • 將憑證匯出至個人資訊交換 (.pfx) 檔案
  • 將憑證從檔案擷取至 base-64 字串
  • 使用 PowerShell Cmdlet 上傳

如需替代選項,以使用完全受管理的服務,來順暢移轉受 TDE 保護的資料庫和對應憑證,請參閱如何使用資料庫移轉服務將內部部署資料庫遷移至 Azure SQL 受控執行個體

重要

移轉的憑證僅用於還原受 TDE 保護的資料庫。 還原完成後,移轉的憑證會由不同的保護裝置取代,無論是服務管理憑證還是金鑰保存庫中的非對稱金鑰,視您在執行個體上設定的 TDE 類型而定。

必要條件

若要完成本文中的步驟,您必須符合下列必要條件:

請確保您已符合下列條件:

注意

本文使用 Azure Az PowerShell 模組,這是與 Azure 互動時建議使用的 PowerShell 模組。 若要開始使用 Az PowerShell 模組,請參閱安裝 Azure PowerShell。 若要瞭解如何遷移至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 遷移至 Az。

重要

Azure SQL 受控執行個體仍然支援 PowerShell Azure Resource Manager 模組,但所有未來的開發都是針對 Az.Sql 模組。 如需這些 Cmdlet,請參閱 AzureRM.Sql \(英文\)。 Az 模組和 AzureRM 模組中命令的引數本質上完全相同。

請執行下列命令以安裝/更新模組:

Install-Module -Name Az.Sql
Update-Module -Name Az.Sql

將 TDE 憑證匯出為 .pfx 檔案

憑證可以直接從來源 SQL Server 執行個體匯出,或從憑證存放區匯出 (如果憑證保留在該處)。

從來源 SQL Server 執行個體匯出憑證

使用下列步驟以 SQL Server Management Studio 匯出憑證,並將其轉換成 .pfx 格式。 步驟中的憑證和檔案名稱和路徑將使用 TDE_Certfull_path 的泛型名稱。 請將其取代為實際名稱。

  1. 在 SSMS 中,開啟新的查詢視窗,並連線到來源 SQL Server 執行個體。

  2. 使用以下指令碼列出受 TDE 保護的資料庫,並獲取保護要移轉資料庫加密的憑證名稱:

    USE master
    GO
    SELECT db.name as [database_name], cer.name as [certificate_name]
    FROM sys.dm_database_encryption_keys dek
    LEFT JOIN sys.certificates cer
    ON dek.encryptor_thumbprint = cer.thumbprint
    INNER JOIN sys.databases db
    ON dek.database_id = db.database_id
    WHERE dek.encryption_state = 3
    

    List of TDE certificates

  3. 執行下指令碼本,將憑證匯出為兩個檔案 (.cer 和 .pvk),以保留公開和私密金鑰資訊:

    USE master
    GO
    BACKUP CERTIFICATE TDE_Cert
    TO FILE = 'c:\full_path\TDE_Cert.cer'
    WITH PRIVATE KEY (
      FILE = 'c:\full_path\TDE_Cert.pvk',
      ENCRYPTION BY PASSWORD = '<SomeStrongPassword>'
    )
    

    Backup TDE certificate

  4. 使用 PowerShell 控制台,使用 Pvk2Pfx 工具,將憑證資訊從兩個新建立的檔案複製到 .pfx 檔案:

    .\pvk2pfx -pvk c:/full_path/TDE_Cert.pvk  -pi "<SomeStrongPassword>" -spc c:/full_path/TDE_Cert.cer -pfx c:/full_path/TDE_Cert.pfx
    

從憑證存放區匯出憑證

如果憑證保留在 SQL Server 本機電腦憑證存放區中,則可以使用下列步驟匯出該憑證:

  1. 開啟 PowerShell 控制台,然後執行下列命令以開啟 Microsoft Management Console 的 [憑證] 嵌入式管理單元:

    certlm
    
  2. 在 [憑證] MMC 嵌入式管理單元中,展開 [個人 > 憑證] 路徑,以查看憑證清單。

  3. 以滑鼠右鍵按一下憑證,然後按一下 [匯出]

  4. 遵循精靈步驟,將憑證和私密金鑰匯出為 .pfx 格式。

使用 Azure PowerShell Cmdlet 將憑證上傳至 Azure SQL 受控執行個體

  1. 首先進行 PowerShell 中的準備步驟:

    # import the module into the PowerShell session
    Import-Module Az
    # connect to Azure with an interactive dialog for sign-in
    Connect-AzAccount
    # list subscriptions available and copy id of the subscription target the managed instance belongs to
    Get-AzSubscription
    # set subscription for the session
    Select-AzSubscription <subscriptionId>
    
  2. 完成所有準備步驟之後,請執行下列命令,將 base-64編碼的憑證上傳至目標受控執行個體:

    # If you are using PowerShell 6.0 or higher, run this command:
    $fileContentBytes = Get-Content 'C:/full_path/TDE_Cert.pfx' -AsByteStream
    # If you are using PowerShell 5.x, uncomment and run this command instead of the one above:
    # $fileContentBytes = Get-Content 'C:/full_path/TDE_Cert.pfx' -Encoding Byte
    $base64EncodedCert = [System.Convert]::ToBase64String($fileContentBytes)
    $securePrivateBlob = $base64EncodedCert  | ConvertTo-SecureString -AsPlainText -Force
    $password = "<password>"
    $securePassword = $password | ConvertTo-SecureString -AsPlainText -Force
    Add-AzSqlManagedInstanceTransparentDataEncryptionCertificate -ResourceGroupName "<resourceGroupName>" `
        -ManagedInstanceName "<managedInstanceName>" -PrivateBlob $securePrivateBlob -Password $securePassword
    

憑證現在即可用於指定的受控執行個體,並可成功還原受 TDE 保護的相對應資料庫備份。

注意

sys.certificates 目錄檢視中看不到上傳的憑證。 您可以執行 RESTORE FILELISTONLY 命令來確認憑證上傳成功。

下一步

在本文中,您已瞭解如何將具有透明資料加密之資料庫加密金鑰的保護憑證,從內部部署或 IaaS SQL Server 執行個體,移轉至 Azure SQL 受控執行個體。

請參閱將資料庫備份還原至 Azure SQL 受控執行個體,以瞭解如何將資料庫備份還原至 Azure SQL 受控執行個體。