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:
- Módulo do Azure PowerShell instalado e atualizado.
- Módulo Az.SQL.
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.
No SSMS, abra uma nova janela de consulta e conecte-se à instância do SQL Server de origem.
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
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>' )
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:
Abra o console do PowerShell e execute o seguinte comando para abrir o snap-in Certificados do Console de Gerenciamento Microsoft:
certlm
No snap-in Certificados MMC, expanda o caminho Certificados Pessoais > para ver a lista de certificados.
Clique com o botão direito do mouse no certificado e clique em Exportar.
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
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>
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.