Condividi tramite


Eseguire la migrazione di un certificato TDE di SQL Server a Istanza gestita di SQL di Azure

Si applica a:Istanza gestita di SQL di Azure SQL

Questo articolo illustra come eseguire la migrazione del certificato prima di eseguire la migrazione del database SQL Server protetto da TDE a Istanza gestita di SQL di Azure usando l'opzione di ripristino nativa.

Quando si esegue la migrazione di un database protetto da Transparent Data Encryption (TDE) da SQL Server a Istanza gestita di SQL di Azure usando l'opzione di ripristino nativa, è prima necessario eseguire la migrazione del certificato corrispondente prima di ripristinare il database nell'istanza gestita di SQL.

In alternativa, è possibile usare il Servizio Migrazione del database di Azure completamente gestito per eseguire facilmente la migrazione di un database protetto da TDE e del certificato corrispondente.

Questo articolo è incentrato sulla migrazione di database da SQL Server a Istanza gestita di SQL di Azure. Per spostare i database tra istanze gestite di SQL, vedere:

Prerequisiti

Per completare le procedure in questo articolo, sono necessari i prerequisiti seguenti:

  • Strumento da riga di comando Pvk2Pfx installato nel server locale o in un altro computer con accesso al certificato esportato come file. La strumento Pvk2Pfx fa parte di Enterprise Windows Driver Kit, un ambiente della riga di comando completo e autonomo.
  • Windows PowerShell versione 5.0 o successiva installata.

Assicurarsi di avere i prerequisiti seguenti:

Eseguire i comandi seguenti in PowerShell per installare o aggiornare il modulo:

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

Esportare il certificato TDE in un file .pfx

È possibile esportare il certificato direttamente dall'istanza di SQL Server di origine o dall'archivio certificati se lo si mantiene lì.

Esportare il certificato dall'istanza di SQL Server di origine

La procedura seguente consente di esportare il certificato usando SQL Server Management Studio e convertirlo in formato pfx. I nomi generici TDE_Cert e full_path sono segnaposto per nomi di certificato, nomi di file e percorsi. Sostituirli con i nomi effettivi.

  1. In SSMS, aprire una nuova finestra di query e connettersi all'istanza di SQL Server di origine.

  2. Usare lo script seguente per elencare i database protetti tramite TDE e ottenere il nome del certificato di protezione della crittografia del database di cui deve essere eseguita la migrazione:

    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
    

    Screenshot in SSMS che mostra un elenco di certificati TDE.

  3. Eseguire questo script per esportare il certificato in una coppia di file (con estensione cer e pvk) contenenti le informazioni relative alla chiave pubblica e privata:

    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>'
    )
    

    Screenshot in SSMS che mostra il certificato TDE di cui è stato eseguito il backup.

  4. Usare la console di PowerShell per copiare le informazioni sul certificato da una coppia di file appena creati in un file con estensione pfx usando lo strumento Pvk2Pfx:

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

Esportare il certificato da un archivio certificati

Se si mantiene il certificato nell'archivio certificati del computer locale di SQL Server, seguire questa procedura per esportarlo:

  1. Aprire la console di PowerShell ed eseguire il comando seguente per aprire lo snap-in Certificati di Microsoft Management Console:

    certlm
    
  2. Nello snap-in MMC Certificati, espandere il percorso Personal>Certificates per visualizzare l'elenco dei certificati.

  3. Fare clic con il pulsante destro del mouse sul certificato e scegliere Esporta.

  4. Seguire la procedura guidata per esportare il certificato e la chiave privata nel formato .pfx.

Caricare il certificato in Istanza gestita di SQL di Azure usando un cmdlet di Azure PowerShell

Importante

Usare un certificato migrato solo per ripristinare il database protetto da TDE. Poco dopo il completamento del ripristino, il certificato migrato viene sostituito da una protezione diversa. Il nuovo protectore è un certificato gestito dal servizio o una chiave asimmetrica dall'archivio chiavi, in base al tipo di TDE configurato nell'istanza.

  1. Per iniziare, eseguire i passaggi di preparazione in 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. Dopo aver completato tutti i passaggi di preparazione, eseguire i comandi seguenti per caricare il certificato con codifica Base 64 nell'istanza gestita di SQL di destinazione:

    # 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
    

Il certificato è ora disponibile per l'istanza gestita di SQL specificata ed è possibile ripristinare il backup del database protetto da TDE corrispondente.

Nota

Il certificato caricato non è visibile nella vista del sys.certificates catalogo. Per confermare il caricamento riuscito del certificato, esegui il comando RESTORE FILELISTONLY .