Migración de certificados de una base de datos protegida por TDE a Azure SQL Managed Instance
Se aplica a: Azure SQL Managed Instance
Al migrar una base de datos protegida mediante Cifrado de datos transparente (TDE) a Azure SQL Managed Instance con la opción de restauración nativa, se debe migrar el certificado correspondiente de la instancia de SQL Server antes de restaurar la base de datos. Este artículo le guía en el proceso de migración manual del certificado a Instancia administrada de Azure SQL:
- Exportación del certificado a un archivo de intercambio de información personal (.pfx)
- Extracción del certificado del archivo a una cadena de base 64
- Carga del archivo mediante un cmdlet de PowerShell
Para ver una opción alternativa que emplea un servicio totalmente administrado para la migración completa de la base de datos protegida con TDE y el certificado correspondiente, consulte Migración de la base de datos local a Azure SQL Managed Instance mediante Azure Database Migration Service.
Importante
El certificado migrado se usa únicamente para la restauración de la base de datos protegida por TDE. Poco después de que se realice la restauración, el certificado migrado se reemplaza por un protector diferente, ya sea un certificado administrado por el servicio o una clave asimétrica del almacén de claves, según el tipo de TDE que haya establecido en la instancia.
Requisitos previos
Para completar los pasos de este artículo, necesitará lo siguiente:
- Tener instalada la herramienta de la línea de comandos Pvk2Pfx en el servidor local o en otro equipo con acceso al certificado exportado como un archivo. La herramienta Pvk2Pfx forma parte del kit de controladores de Windows para empresa, un entorno de línea de comandos autocontenido.
- Tener instalado Windows PowerShell, versión 5.0 o superior.
Asegúrese de que dispone de lo siguiente:
- Tener instalado y actualizado el módulo de Azure PowerShell.
- Módulo Az.Sql.
Nota:
En este artículo se usa el módulo Az de PowerShell, que es el módulo de PowerShell que se recomienda para interactuar con Azure. Para empezar a trabajar con el módulo Az de PowerShell, consulte Instalación de Azure PowerShell. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.
Importante
El módulo de Azure Resource Manager para PowerShell todavía es compatible con Instancia administrada de Azure SQL, pero todo el desarrollo futuro se realizará para el módulo Az.Sql. Para estos cmdlets, consulte AzureRM.Sql. Los argumentos para los comandos del módulo Az y los módulos AzureRM son esencialmente idénticos.
Ejecute los comandos siguientes de PowerShell para instalar o actualizar el módulo:
Install-Module -Name Az.Sql
Update-Module -Name Az.Sql
Exportación del certificado de TDE a un archivo .pfx
El certificado se puede exportar directamente desde la instancia de SQL Server de origen o desde el almacén de certificados, si se conserva ahí.
Exportación del certificado desde la instancia de SQL Server de origen
Siga estos pasos para exportar el certificado con SQL Server Management Studio y convertirlo a formato .pfx. En los pasos se usan los nombres genéricos TDE_Cert y full_path para los nombres de certificados y archivos y las rutas de acceso. Estos se deben reemplazar por los nombres reales.
En SSMS, abra una nueva ventana de consulta y conéctese a la instancia de SQL Server de origen.
Use el siguiente script para enumerar las bases de datos protegidas por TDE y obtener el nombre del certificado que protege el cifrado de la base de datos que se va a migrar:
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
Ejecute el script siguiente para exportar el certificado a un par de archivos (.cer y .pvk), y mantener así la información de clave pública y 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 la consola de PowerShell para copiar la información del certificado de un par de archivos recién creados a un archivo .pfx, mediante la herramienta 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
Exportación del certificado desde un almacén de certificados
Si el certificado se guarda en el almacén de certificados de la máquina local de SQL Server, se puede exportar mediante los siguientes pasos:
Abra la consola de PowerShell y ejecute el siguiente comando para abrir el complemento Certificados de Microsoft Management Console:
certlm
En el complemento Certificados de MMC, expanda la ruta de acceso Personal > Certificados para ver la lista de certificados.
Haga clic con el botón derecho en el certificado y haga clic en Exportar.
Siga los pasos del asistente para exportar el certificado y la clave privada a un formato .pfx.
Carga del certificado en Azure SQL Managed Instance mediante un cmdlet de Azure PowerShell
Comience con los pasos de preparación de 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>
Una vez realizados todos los pasos de preparación, ejecute los siguientes comandos para cargar el certificado codificado en base 64 en la instancia administrada 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
El certificado ya está disponible en la instancia administrada especificada, y la copia de seguridad de la base de datos protegida por TDE correspondiente se puede restaurar correctamente.
Nota
El certificado cargado no se ve en la vista de catálogo sys.certificates. Para confirmar la carga correcta del certificado, puede ejecutar el comando RESTORE FILELISTONLY.
Pasos siguientes
En este artículo, aprendió a migrar un certificado que protege la clave de cifrado de una base de datos con Cifrado de datos transparente, desde la instancia de SQL Server local o desde IaaS a Azure SQL Managed Instance.
Para aprender a restaurar la copia de seguridad de una base de datos en Azure SQL Managed Instance, consulta Restauración de una copia de seguridad de datos en Azure SQL Managed Instance.