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:

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.

  1. En SSMS, abra una nueva ventana de consulta y conéctese a la instancia de SQL Server de origen.

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

    Lista de certificados de TDE

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

    Copia de seguridad del certificado de TDE

  4. 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:

  1. Abra la consola de PowerShell y ejecute el siguiente comando para abrir el complemento Certificados de Microsoft Management Console:

    certlm
    
  2. En el complemento Certificados de MMC, expanda la ruta de acceso Personal > Certificados para ver la lista de certificados.

  3. Haga clic con el botón derecho en el certificado y haga clic en Exportar.

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

  1. 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>
    
  2. 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.