Eseguire la migrazione del certificato di un database protetto tramite TDE a Istanza gestita di SQL di Azure

Si applica a: Istanza gestita di SQL di Azure SQL

In caso di migrazione di un database protetto tramite Transparent Data Encryption (TDE) a un'istanza gestita di SQL di Azure con l'opzione del ripristino nativo, prima di ripristinare il database è necessario eseguire la migrazione del certificato corrispondente dall'istanza di SQL Server. Questo articolo illustra il processo di migrazione manuale del certificato a Istanza gestita di database SQL di Azure:

  • Esportare il certificato in un file .pfx (Personal Information Exchange)
  • Estrarre il certificato dal file a una stringa a base 64
  • Caricare il certificato con il cmdlet di PowerShell

Per un'opzione alternativa basata sull'uso di un servizio completamente gestito per una migrazione senza problemi sia del database protetto tramite TDE che del certificato corrispondente, vedere l'articolo su Come eseguire la migrazione di un database locale a Istanza gestita di SQL di Azure con Servizio Migrazione del database di Azure.

Importante

Il certificato di cui viene eseguita la migrazione viene usato solo per il ripristino del database protetto tramite TDE. Subito dopo il ripristino, il certificato migrato viene sostituito da una protezione diversa, un certificato gestito dal servizio o una chiave asimmetrica dall'insieme di credenziali delle chiavi, a seconda del tipo di TDE impostato nell'istanza.

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 installato.

Assicurarsi che sia disponibile quanto segue:

Nota

Questo articolo usa il modulo di PowerShell Azure Az consigliato per l'interazione con Azure. Per iniziare a usare il modulo Az PowerShell, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo Az PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Importante

Il modulo Azure Resource Manager di PowerShell è ancora supportato da Istanza gestita SQL di Azure, ma tutte le attività di sviluppo future sono incentrate sul modulo Az.Sql. Per informazioni su questi cmdlet, vedere AzureRM.Sql. Gli argomenti per i comandi nei moduli Az e AzureRM sono sostanzialmente identici.

Eseguire questi comandi in PowerShell per installare/aggiornare il modulo di PowerShell:

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

Esportare il certificato TDE in un file .pfx

Il certificato può essere esportato direttamente dall'istanza di SQL Server di origine oppure dall'archivio certificati se si trova in tale archivio.

Esportare il certificato dall'istanza di SQL Server di origine

Usare la procedura seguente per esportare il certificato con SQL Server Management Studio e convertirlo in formato .pfx. Nella procedura, come nomi e percorsi del certificato e del file vengono usati i nomi generici TDE_Cert e full_path, che dovranno essere sostituiti 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
    

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

    Eseguire il backup del certificato TDE

  4. Usare la console PowerShell per copiare le informazioni del certificato da una coppia di file appena creata a un file PFX (Personal Information Exchange) 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 all'archivio certificati

Se il certificato si trova nell'archivio certificati del computer locale di SQL Server, può essere esportato seguendo questa procedura:

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

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

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

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

Caricare il certificato in un'istanza gestita di SQL di Azure con il cmdlet di Azure PowerShell

  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. Al termine dei passaggi di preparazione, eseguire questi comandi per caricare il certificato con codifica a base 64 nell'istanza gestita 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 specificata e il backup del database protetto tramite TDE corrispondente può essere ripristinato correttamente.

Nota

I nomi di certificato sono visibili nella vista del catalogo sys.certificates. È possibile eseguire il comando RESTORE FILELISTONLY per confermare l'esito positivo del caricamento del certificato.

Passaggi successivi

In questo articolo è stato illustrato come eseguire la migrazione del certificato di protezione della chiave di crittografia del database con Transparent Data Encryption, dall'istanza locale o IaaS di SQL Server a un'istanza gestita del database SQL di Azure.

Per informazioni su come ripristinare un backup di database in un'istanza gestita di SQL di Azure, vedere Ripristinare un backup di database in un'istanza gestita di SQL di Azure.