SQL Always On, когда данные восстановления BitLocker шифруются в базе данных

Для Always On SQL требуются дополнительные действия, если сведения BitLocker шифруются с помощью инструкций в разделе Шифрование данных восстановления в базе данных. Дополнительные действия гарантируют, что все узлы Always On могут автоматически открывать главный ключ базы данных (DMK) при возникновении события отработки отказа. Следующие действия позволяют легко получить ключи BitLocker без вмешательства вручную.

Общие сведения о Always On SQL при шифровании данных восстановления BitLocker в базе данных

SQL Server шифрует данные с помощью иерархической инфраструктуры и подробно описано в разделе Иерархия шифрования.

  • Главный ключ сайта (SMK) — этот ключ является ключом для каждого экземпляра, который является уникальным для каждого узла SQL Server Always On и не реплицируется. Он используется для шифрования master ключа базы данных.
  • Главный ключ базы данных (DMK) — этот ключ хранится в базе данных и реплицируется. Он используется для шифрования BitLockerManagement_CERT.
  • BitLockerManagement_CERT — этот сертификат хранится в базе данных и реплицируется. Он используется для шифрования некоторых связанных с BitLocker данных, таких как ключи восстановления.

SMK шифрует пароль DMK. Пакеты SMK зависят от узла. При возникновении события отработки отказа новый первичный узел не может расшифровать пароль dmK, так как он был зашифрован с помощью другого SMK. Установка пароля dmk на каждом узле позволяет узлу расшифровать пароль при отработке отказа.

Примечание.

BitLockerManagement_CERT выполняет шифрование столбцов. В случае потери или удаления этого сертификата или потери или удаления интеллектуального ключа интеллектуального приложения, который его зашифровал, ключи BitLocker необходимо снова депонировать и повторно зашифровать.

Если пароль главного ключа базы данных (DMK) известен

Выполните следующую команду на каждом узле в группе доступности, где размещается база данных Configuration Manager:

Важно!

В следующей команде:

  • Замените password везде надежным паролем по своему выбору. Убедитесь, что пароль надежно хранится для дальнейшего использования.
  • Замените CM_XXX именем базы данных Configuration Manager (CM).
EXEC sp_control_dbmasterkey_password
    @db_name = N'CM_XXX',
    @password = N'password',
    @action = N'add';

Эта команда регистрирует пароль DMK с помощью главного ключа локальной службы (SMK), что позволяет SQL Server автоматически открывать dmK при возникновении события отработки отказа. Этот процесс гарантирует автоматическую расшифровку интеллектуального ключа на этом узле после отработки отказа или перезапуска.

Чтобы убедиться, что все узлы могут автоматически открывать главный ключ базы данных (DMK) и расшифровывать данные, см . раздел Проверка того, что все узлы могут автоматически открывать главный ключ базы данных (DMK) и расшифровать данные в этой статье.

Если существующий пароль главного ключа базы данных (DMK) неизвестен

Если существующий пароль dmK неизвестен, необходимо удалить существующий dmk и создать новый с известным паролем. В этих шагах описано, как выполнить эту процедуру.

Поиск допустимого dmk

Если неизвестно, какой узел имеет допустимый dmk, выполните следующие действия, чтобы определить, где открыт существующий dmK:

Важно!

В следующих запросах и командах:

  • Замените password везде надежным паролем по своему выбору. Убедитесь, что пароль надежно хранится в известном расположении для дальнейшего использования.
  • Замените CM_XXX именем базы данных Configuration Manager (CM).
  1. Выполните следующий запрос на первичном узле:

    SELECT TOP 5 RecoveryAndHardwareCore.DecryptString(RecoveryKey, DEFAULT)
    FROM RecoveryAndHardwareCore_Keys
    ORDER BY LastUpdateTime DESC
    
  2. В результирующем запросе:

    • Если dmK открыт, запрос возвращает значения открытого текста для всех строк, в которых есть допустимый ключ. Этот узел является узлом для запуска, и следующий шаг можно пропустить.
    • Если dmK не открыт, запрос возвращает значения NULL для всех строк. Текущий узел не является узлом, в котором открыт dmK. Выполните следующий шаг, чтобы найти узел, где открыт dmK.
  3. Если запрос возвращает все значения NULL, отработка отказа на каждый дополнительный узел и повторите предыдущие шаги, пока не будет найден узел, который может успешно расшифровать RecoveryAndHardwareCore_Keys . Этот узел является узлом для запуска.

Создание главного ключа базы данных (DMK)

После определения нужного узла с открытым dmK выполните следующие действия:

  1. На узле, который был определен на предыдущих шагах, выполните следующий запрос, чтобы экспортировать сертификат BitLockerManagement_CERT с его закрытым ключом. Убедитесь, что используется надежный пароль:

    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. Создайте резервную копию существующего главного ключа базы данных (DMK), выполнив следующий запрос для экспорта существующего динамического административного ключа:

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

    Примечание.

    Этот шаг необязателен, но рекомендуется. Убедитесь, что резервная копия хранится в безопасном известном расположении.

  3. Выполните следующий запрос, чтобы удалить существующий сертификат и dmK:

    DROP CERTIFICATE BitLockerManagement_CERT;
    DROP MASTER KEY;
    

    На этом шаге удаляются старые ключи.

  4. Выполните следующий запрос, чтобы создать dmK. Убедитесь, что используется надежный пароль:

    CREATE MASTER KEY
    ENCRYPTION BY PASSWORD = 'password';
    
  5. Выполните следующий запрос, чтобы зарегистрировать новый пароль DMK в локальном SMK:

    EXEC sp_control_dbmasterkey_password
        @db_name = N'CM_XXX',
        @password = N'password',
        @action = N'add';
    
  6. Выполните следующий запрос, чтобы импортировать ранее экспортированный сертификат BitLockerManagement_CERT:

    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. Выполните следующий запрос, чтобы предоставить необходимые разрешения на управление сертификатом:

    GRANT CONTROL ON CERTIFICATE::BitLockerManagement_CERT TO RecoveryAndHardwareRead;
    GRANT CONTROL ON CERTIFICATE::BitLockerManagement_CERT TO RecoveryAndHardwareWrite;
    
  8. Отработка отказа на следующий узел.

  9. Выполните следующий запрос, чтобы зарегистрировать пароль dmK в локальном SMK. Выполните один раз в реплика:

    EXEC sp_control_dbmasterkey_password
        @db_name = N'CM_XXX',
        @password = N'password',
        @action = N'add';
    
  10. Выполните два предыдущих шага на всех оставшихся узлах.

  11. Отработка отказа на исходный узел.

  12. Чтобы убедиться, что все узлы могут автоматически открывать главный ключ базы данных (DMK) и расшифровывать данные, см. в следующем разделе Проверка того, что все узлы могут автоматически открывать главный ключ базы данных (DMK) и расшифровывать данные в этой статье.

Убедитесь, что все узлы могут автоматически открыть главный ключ базы данных (DMK) и расшифровать данные.

Чтобы убедиться, что все узлы могут автоматически открыть главный ключ базы данных (DMK) и расшифровать данные:

  1. Отработка отказа на узел.

  2. Выполните следующий запрос:

    SELECT TOP 5 RecoveryAndHardwareCore.DecryptString(RecoveryKey, DEFAULT)
    FROM RecoveryAndHardwareCore_Keys
    ORDER BY LastUpdateTime DESC
    
  3. Если запрос возвращает значения открытого текста для любых строк, в которых есть допустимый ключ, узел может автоматически открыть главный ключ базы данных (DMK) и расшифровать данные.

  4. Повторите предыдущие три шага для каждого дополнительного узла.

Совет

Для повышения безопасности надежно храните надежный пароль DMK. Например, в Azure Key Vault или другом безопасном хранилище секретов. Кроме того, избегайте жесткого кодирования пароля dmK в виде обычного текста в скриптах или файлах конфигурации.