Migrar um certificado de base de dados protegida por Encriptação de Dados Transparente para o Azure SQL Managed Instance

Aplica-se a:Instância Gerenciada SQL do Azure

Quando você estiver migrando um banco de dados protegido pela TDE (Criptografia de Dados Transparente) para a Instância Gerenciada SQL do Azure usando a opção de restauração nativa, o certificado correspondente da instância do SQL Server precisa ser migrado antes da restauração do banco de dados. Este artigo orienta você pelo processo de migração manual do certificado para a Instância Gerenciada SQL do Azure:

  • Exportar o certificado para um arquivo de troca de informações pessoais (.pfx)
  • Extrair o certificado de um arquivo para uma cadeia de caracteres base-64
  • Carregue-o usando um cmdlet do PowerShell

Para obter uma opção alternativa usando um serviço totalmente gerenciado para migração contínua de um banco de dados protegido por TDE e um certificado correspondente, consulte Como migrar seu banco de dados local para a Instância Gerenciada SQL do Azure usando o Serviço de Migração de Banco de Dados do Azure.

Importante

Um certificado migrado é usado apenas para restaurar o banco de dados protegido por TDE. Logo após a restauração, o certificado migrado é substituído por um protetor diferente, um certificado gerenciado por serviço ou uma chave assimétrica do cofre de chaves, dependendo do tipo de TDE definido na instância.

Pré-requisitos

Para executar os passos descritos neste artigo, os seguintes requisitos são necessários:

  • Ferramenta de linha de comandos Pvk2Pfx instalada no servidor no local ou noutro computador com acesso ao certificado exportado como um ficheiro. A ferramenta Pvk2Pfx faz parte do Enterprise Windows Driver Kit, um ambiente de linha de comando independente.
  • Versão 5.0 ou posterior do Windows PowerShell instalada.

Certifique-se de que tem o seguinte:

Nota

Este artigo usa o módulo Azure Az PowerShell, que é o módulo PowerShell recomendado para interagir com o Azure. Para começar a utilizar o módulo Azure PowerShell, veja Instalar o Azure PowerShell. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.

Importante

O módulo PowerShell Azure Resource Manager ainda é suportado pela Instância Gerenciada SQL do Azure, mas todo o desenvolvimento futuro é para o módulo Az.Sql. Para esses cmdlets, consulte AzureRM.Sql. Os argumentos para os comandos no módulo Az e nos módulos AzureRM são substancialmente idênticos.

Execute os seguintes comandos no PowerShell para instalar/atualizar o módulo:

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

Exportar o certificado TDE para um arquivo .pfx

O certificado pode ser exportado diretamente da instância do SQL Server de origem ou do armazenamento de certificados, se estiver sendo mantido lá.

Exportar o certificado da instância do SQL Server de origem

Use as etapas a seguir para exportar o certificado com o SQL Server Management Studio e convertê-lo no formato .pfx. Os nomes genéricos TDE_Cert e full_path estão sendo usados para nomes de certificados e arquivos e caminhos através das etapas. Devem ser substituídos pelos nomes reais.

  1. No SSMS, abra uma nova janela de consulta e conecte-se à instância do SQL Server de origem.

  2. Use o script a seguir para listar bancos de dados protegidos por TDE e obter o nome do certificado que protege a criptografia do banco de dados a ser migrado:

    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. Execute o script seguinte para exportar o certificado para um par de ficheiros (.cer e .pvk) ao manter as informações da chave pública e privada:

    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. Use o console do PowerShell para copiar informações de certificado de um par de arquivos recém-criados para um arquivo .pfx, usando a ferramenta 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
    

Exportar o certificado de um armazenamento de certificados

Se o certificado for mantido no armazenamento de certificados da máquina local do SQL Server, ele poderá ser exportado usando as seguintes etapas:

  1. Abra o console do PowerShell e execute o seguinte comando para abrir o snap-in Certificados do Console de Gerenciamento Microsoft:

    certlm
    
  2. No snap-in Certificados MMC, expanda o caminho Certificados Pessoais > para ver a lista de certificados.

  3. Clique com o botão direito do mouse no certificado e clique em Exportar.

  4. Siga o assistente para exportar o certificado e a chave privada para um formato .pfx.

Carregue o certificado para a Instância Gerenciada SQL do Azure usando um cmdlet do Azure PowerShell

  1. Comece pelos passos de preparação no 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. Quando todas as etapas de preparação estiverem concluídas, execute os seguintes comandos para carregar o certificado codificado em base 64 para a instância gerenciada de destino:

    # 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
    

O certificado agora está disponível para a instância gerenciada especificada e o backup do banco de dados protegido por TDE correspondente pode ser restaurado com êxito.

Nota

O certificado carregado não é visível na exibição do catálogo sys.certificates. Para confirmar o carregamento bem-sucedido do certificado, você pode executar o comando RESTORE FILELISTONLY .

Próximos passos

Neste artigo, você aprendeu como migrar um certificado que protege a chave de criptografia de um banco de dados com Criptografia de Dados Transparente, da instância local ou IaaS do SQL Server para a Instância Gerenciada SQL do Azure.

Consulte Restaurar um backup de banco de dados para uma Instância Gerenciada SQL do Azure para saber como restaurar um backup de banco de dados para a Instância Gerenciada SQL do Azure.