Compartir a través de


SQL Always On cuando se cifran los datos de recuperación de BitLocker en la base de datos

Para sql Always On, se requieren pasos adicionales cuando la información de BitLocker se cifra mediante las instrucciones de Cifrado de datos de recuperación en la base de datos. Los pasos adicionales garantizan que todos los nodos Always On puedan abrir automáticamente la clave maestra de base de datos (DMK) cuando se produzca un evento de conmutación por error. Los pasos siguientes permiten la recuperación sin problemas de claves de BitLocker sin intervención manual.

Introducción a sql Always On cuando se cifran los datos de recuperación de BitLocker en la base de datos

SQL Server cifra los datos mediante una infraestructura jerárquica y se describe en profundidad en Jerarquía de cifrado.

  • Clave maestra de sitio (SMK): esta clave es una clave por instancia que es única para cada nodo SQL Server Always On y no se replica. Se usa para cifrar la clave maestra de base de datos.
  • Clave maestra de base de datos (DMK): esta clave se almacena en la base de datos y se replica. Se usa para cifrar el BitLockerManagement_CERT.
  • BitLockerManagement_CERT : este certificado se almacena en la base de datos y se replica. Se usa para cifrar algunos datos relacionados con BitLocker, como las claves de recuperación.

El SMK cifra la contraseña de DMK. Los SMK son específicos del nodo. Cuando se produce un evento de conmutación por error, el nuevo nodo principal no puede descifrar la contraseña de DMK, ya que se cifró con un SMK diferente. Al establecer la contraseña DMK en cada nodo, el nodo puede descifrar la contraseña durante la conmutación por error.

Nota:

El BitLockerManagement_CERT realiza el cifrado de las columnas. Si se pierde o se elimina este certificado, o la DMK que lo cifró se perdió o eliminó, las claves de BitLocker deben volver a cifrarse.

Si se conoce la contraseña de la clave maestra de base de datos (DMK)

Ejecute el siguiente comando en cada nodo del grupo de disponibilidad que hospeda la base de datos Configuration Manager:

Importante

En el siguiente comando:

  • Reemplace password por todas partes por una contraseña segura de su elección. Asegúrese de almacenar la contraseña de forma segura para futuras referencias.
  • Reemplace por CM_XXX el nombre de la base de datos de Configuration Manager (CM).
EXEC sp_control_dbmasterkey_password
    @db_name = N'CM_XXX',
    @password = N'password',
    @action = N'add';

Este comando registra la contraseña de DMK con la clave maestra de servicio (SMK) local, lo que permite SQL Server abrir automáticamente la DMK cuando se produce un evento de conmutación por error. Este proceso garantiza que la DMK se pueda descifrar automáticamente en ese nodo después de una conmutación por error o un reinicio.

Para comprobar que todos los nodos pueden abrir automáticamente la clave maestra de base de datos (DMK) y descifrar los datos, consulte la sección Comprobar que todos los nodos pueden abrir automáticamente la clave maestra de base de datos (DMK) y descifrar los datos de este artículo.

Si se desconoce la contraseña de la clave maestra de base de datos (DMK) existente

Si se desconoce la contraseña de DMK existente, se debe quitar la DMK existente y crear una nueva con una contraseña conocida. Estos pasos documenta cómo realizar este procedimiento.

Búsqueda de una DMK válida

Si se desconoce qué nodo tiene una DMK válida, siga estos pasos para determinar dónde está abierta la DMK existente:

Importante

En las siguientes consultas y comandos:

  • Reemplace password por todas partes por una contraseña segura de su elección. Asegúrese de almacenar de forma segura la contraseña en una ubicación conocida para futuras referencias.
  • Reemplace por CM_XXX el nombre de la base de datos de Configuration Manager (CM).
  1. Ejecute la siguiente consulta en el nodo principal:

    SELECT TOP 5 RecoveryAndHardwareCore.DecryptString(RecoveryKey, DEFAULT)
    FROM RecoveryAndHardwareCore_Keys
    ORDER BY LastUpdateTime DESC
    
  2. En la consulta resultante:

    • Si la DMK está abierta, la consulta devuelve valores de texto no cifrado para las filas que tengan una clave válida en ellas. Este nodo es el nodo en el que se va a iniciar y se puede omitir el paso siguiente.
    • Si la DMK no está abierta, la consulta devuelve valores NULL para todas las filas. El nodo actual no es el nodo donde está abierta la DMK. Siga el paso siguiente para buscar el nodo donde está abierta la DMK.
  3. Si la consulta devuelve todos los valores NULL, realice la conmutación por error a cada nodo secundario y repita los pasos anteriores hasta que se encuentre el nodo que puede descifrar correctamente RecoveryAndHardwareCore_Keys . Este nodo es el nodo en el que se va a iniciar.

Creación de una nueva clave maestra de base de datos (DMK)

Una vez identificado el nodo adecuado con la DMK abierta, siga estos pasos:

  1. En el nodo que se identificó en los pasos anteriores, ejecute la siguiente consulta para exportar el certificado de BitLockerManagement_CERT con su clave privada. Asegúrese de usar una contraseña segura:

    BACKUP CERTIFICATE BitLockerManagement_CERT
    TO FILE = 'C:\Windows\Temp\BitLockerManagement_CERT'
    WITH PRIVATE KEY
    (
        FILE = 'C:\Windows\Temp\BitLockerManagement_CERT_KEY',
        ENCRYPTION BY PASSWORD = 'password'
    );
    
  2. Realice una copia de seguridad de la clave maestra de base de datos (DMK) existente mediante la ejecución de la siguiente consulta para exportar la DMK existente:

    BACKUP MASTER KEY
    TO FILE = 'C:\Windows\Temp\DMK'
    ENCRYPTION BY PASSWORD = 'password';
    

    Nota:

    Este paso es opcional, pero se recomienda. Asegúrese de mantener la copia de seguridad en una ubicación conocida segura.

  3. Ejecute la consulta siguiente para quitar el certificado existente y DMK:

    DROP CERTIFICATE BitLockerManagement_CERT;
    DROP MASTER KEY;
    

    En este paso se quitan las claves antiguas.

  4. Ejecute la consulta siguiente para crear una nueva DMK. Asegúrese de usar una contraseña segura:

    CREATE MASTER KEY
    ENCRYPTION BY PASSWORD = 'password';
    
  5. Ejecute la consulta siguiente para registrar la nueva contraseña de DMK con el SMK local:

    EXEC sp_control_dbmasterkey_password
        @db_name = N'CM_XXX',
        @password = N'password',
        @action = N'add';
    
  6. Ejecute la consulta siguiente para importar el certificado de BitLockerManagement_CERT exportado anteriormente:

    CREATE CERTIFICATE BitLockerManagement_CERT AUTHORIZATION RecoveryAndHardwareCore
    FROM FILE = 'C:\Windows\Temp\BitLockerManagement_CERT'
    WITH PRIVATE KEY
    (
        FILE = 'C:\Windows\Temp\BitLockerManagement_CERT_KEY',
        DECRYPTION BY PASSWORD = 'password'
    );
    
  7. Ejecute la consulta siguiente para conceder los permisos de control necesarios en el certificado:

    GRANT CONTROL ON CERTIFICATE::BitLockerManagement_CERT TO RecoveryAndHardwareRead;
    GRANT CONTROL ON CERTIFICATE::BitLockerManagement_CERT TO RecoveryAndHardwareWrite;
    
  8. Realice la conmutación por error al nodo siguiente.

  9. Ejecute la consulta siguiente para registrar la contraseña de DMK con el SMK local. Ejecute una vez por réplica:

    EXEC sp_control_dbmasterkey_password
        @db_name = N'CM_XXX',
        @password = N'password',
        @action = N'add';
    
  10. Realice los dos pasos anteriores en los nodos restantes.

  11. Realice la conmutación por error al nodo original.

  12. Para comprobar que todos los nodos pueden abrir automáticamente la clave maestra de base de datos (DMK) y descifrar los datos, consulte la siguiente sección Comprobar que todos los nodos pueden abrir automáticamente la clave maestra de base de datos (DMK) y descifrar los datos de este artículo.

Compruebe que todos los nodos pueden abrir automáticamente la clave maestra de base de datos (DMK) y descifrar los datos.

Para comprobar que todos los nodos pueden abrir automáticamente la clave maestra de base de datos (DMK) y descifrar los datos:

  1. Realice la conmutación por error a un nodo.

  2. Ejecute la consulta siguiente:

    SELECT TOP 5 RecoveryAndHardwareCore.DecryptString(RecoveryKey, DEFAULT)
    FROM RecoveryAndHardwareCore_Keys
    ORDER BY LastUpdateTime DESC
    
  3. Si la consulta devuelve valores de texto no cifrado para las filas que tienen una clave válida en ellas, el nodo puede abrir automáticamente la clave maestra de base de datos (DMK) y puede descifrar los datos.

  4. Repita los tres pasos anteriores para cada nodo adicional.

Sugerencia

Para mejorar la seguridad, almacene la contraseña de DMK segura de forma segura. Por ejemplo, en Azure Key Vault u otro almacén secreto seguro. Además, evite codificar de forma rígida la contraseña de DMK en texto sin formato en scripts o archivos de configuración.