Migrar o certificado de banco de dados protegido por TDE para Instância Gerenciada do SQL do Azure

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

Ao migrar um banco de dados protegido pela Transparent Data Encryption (TDE) para uma Instância Gerenciada de SQL do Azure usando a opção de restauração nativa, o certificado correspondente da instância SQL Server precisará ser migrado antes da restauração do banco de dados. Este artigo orienta você pelo processo de migração manual do certificado para Instância Gerenciada de SQL do Azure:

  • Exportação do certificado TDE para um arquivo .pfx (Troca de Informações Pessoais)
  • Extrair o certificado de um arquivo para uma cadeia de caracteres de base 64
  • Upload do certificado usando o cmdlet do PowerShell

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

Importante

Um certificado migrado é usado somente para restauração do banco de dados protegido por TDE. Logo após a conclusão da 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 que você definiu na instância.

Pré-requisitos

Para concluir as etapas neste artigo, você precisa dos seguintes pré-requisitos:

  • Ferramenta de linha de comando Pvk2Pfx instalada no servidor local ou em outro computador com acesso ao certificado exportado como arquivo. A ferramenta Pvk2Pfx faz parte do Kit de drivers corporativos do Windows, um ambiente de linha de comando autônomo independente.
  • Windows PowerShell versão 5.0 ou posterior instalada.

Verifique se você tem o seguinte:

Observação

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

Importante

O módulo ARM (Azure Resource Manager) do PowerShell ainda é compatível com a Instância Gerenciada de SQL do Azure, mas todo o desenvolvimento futuro será para o módulo Az.Sql. Para esses cmdlets, confira 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 repositório de certificados, se estiver nesse local.

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

Use as etapas a seguir para exportar o certificado com 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 e caminhos de certificado e de arquivo por meio das etapas. Eles devem ser substituídos por nomes reais.

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

  2. Use o script a seguir para listar os bancos de dados protegidos por TDE e obter o nome da criptografia de proteção de certificado 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 a seguir para exportar o certificado para um par de arquivos (.cer e .pvk), mantendo as informações de 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 do 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 do armazenamento de certificados

Se o certificado for mantido no armazenamento de certificados do computador local do SQL Server, será possível exportá-lo seguindo as seguintes etapas:

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

    certlm
    
  2. Nos snap-in Certificados do MMC, expanda o caminho Pessoal > Certificados para ver a lista de certificados.

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

  4. Siga as páginas do assistente para exportar o certificado e a chave privada em formato .pfx.

Carregar o certificado na Instância Gerenciada do SQL do Azure usando o cmdlet do Azure PowerShell

  1. Comece com as etapas 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. Após a conclusão de todas as etapas de preparação, execute os comandos a seguir 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
    

Agora o certificado 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.

Observação

O certificado carregado não está 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óximas etapas

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

Consulte Restaurar um backup de banco de dados em uma Instância gerenciada de SQL do Azure para saber como restaurar um backup de banco de dados em uma instância gerenciada de banco de dados SQL do Azure.