Назад | Перейти на главную страницу

Нужно ли мне делать резервную копию пароля шифрования и симметричного ключа SQL Server?

Я пытаюсь настроить SQL Server для использования шифрования на уровне ячеек для некоторых конфиденциальных данных. Это кажется простым этот пример в MSDN:

  1. Создайте мастер-ключ с надежным паролем.
  2. Создайте сертификат.
  3. Создайте симметричный ключ с сертификатом.
  4. При необходимости зашифруйте данные с помощью EncryptByKey работают так: EncryptByKey(Key_GUID('SensitiveData_Key_01'), MySensitiveDataColumn)
  5. Расшифруйте данные по мере необходимости, используя DecryptByKey работают так: CONVERT(varchar, DecryptByKeyAutoCert(cert_ID('MyCertName'), NULL, MySensitiveDataColumn))

Итак, учитывая приведенное выше использование, допустим, мой сервер умирает. Мне нужно переустановить SQL Server на совершенно новом компьютере с Windows (или виртуальной машине) и восстановить базу данных из резервной копии. Если я восстановлю резервную копию базы данных, продолжит ли шифрование / дешифрование работать правильно?

Если нет, то какие данные мне нужно сохранить / сделать резервную копию, чтобы я мог восстановить свои данные в случае катастрофического сбоя?

Судя по диаграммам на эта другая статья MSDN об иерархии шифрования, я предполагаю, что мне нужно сделать резервную копию некоторых или всего следующего:

  1. Пароль для Мастер Ключа
  2. Отмычка?
  3. Сертификат?
  4. Симметричный ключ?

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

Проведя еще несколько исследований, я нашел эту статью о «Клонирование» симметричных ключей.

Вы можете проинструктировать CREATE SYMMETRIC KEY функция для генерации симметричного ключа с помощью KEY_SOURCE и IDENTITY_VALUE. Позже вы можете повторно сгенерировать тот же ключ, передав те же значения для KEY_SOURCE и IDENTITY_VALUE.

Вот краткий пример:

CREATE CERTIFICATE CreditCards
   WITH SUBJECT = 'Customer Credit Card Numbers';
GO

CREATE SYMMETRIC KEY CreditCards_Key_01
WITH KEY_SOURCE = 'A pass phrase from which to derive the key.',
    IDENTITY_VALUE = 'An identity phrase from which to generate a GUID for tagging data that is encrypted with a temporary key',
    ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE CreditCards;
GO

OPEN SYMMETRIC KEY CreditCards_Key_01
   DECRYPTION BY CERTIFICATE CreditCards

UPDATE MyTable
SET EncryptedCreditCardNumber = EncryptByKey(Key_GUID('CreditCards_Key_01'), CreditCardNumber);
GO

Цитируя Майкла Коулза из его статьи

«На мой взгляд, было бы разумнее потребовать по умолчанию параметры IDENTITY_VALUE и KEY_SOURCE».

Не уверен, почему они этого не сделали, или, по крайней мере, подчеркните это в примере, который у них есть в MSDN!