Я пытаюсь настроить SQL Server для использования шифрования на уровне ячеек для некоторых конфиденциальных данных. Это кажется простым этот пример в MSDN:
EncryptByKey
работают так: EncryptByKey(Key_GUID('SensitiveData_Key_01'), MySensitiveDataColumn)
DecryptByKey
работают так: CONVERT(varchar, DecryptByKeyAutoCert(cert_ID('MyCertName'), NULL, MySensitiveDataColumn))
Итак, учитывая приведенное выше использование, допустим, мой сервер умирает. Мне нужно переустановить SQL Server на совершенно новом компьютере с Windows (или виртуальной машине) и восстановить базу данных из резервной копии. Если я восстановлю резервную копию базы данных, продолжит ли шифрование / дешифрование работать правильно?
Если нет, то какие данные мне нужно сохранить / сделать резервную копию, чтобы я мог восстановить свои данные в случае катастрофического сбоя?
Судя по диаграммам на эта другая статья MSDN об иерархии шифрования, я предполагаю, что мне нужно сделать резервную копию некоторых или всего следующего:
Вам следует смоделировать предполагаемую катастрофу и подтвердить, что вы можете восстановить ее на тестовой машине. Все, что вам нужно, должно стать очевидным довольно быстро в процессе восстановления.
Проведя еще несколько исследований, я нашел эту статью о «Клонирование» симметричных ключей.
Вы можете проинструктировать 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!