2016-12-08 3 views
1

Я использую следующий код для создания SQL шифрования ключейКак создать резервную копию Symmetric Key в SQL Server?

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Pass>' 
CREATE CERTIFICATE MyEncryptCert WITH SUBJECT = 'Descryption', EXPIRY_DATE = '2115-1-1' 
CREATE SYMMETRIC KEY MySymmetricKey WITH ALGORITHM = AES_256 ENCRYPTION BY CERTIFICATE MyEncryptCert 

Как зашифровать данные

OPEN SYMMETRIC KEY MySymmetricKey DECRYPTION BY CERTIFICATE MyEncryptCert 
SET @Result = ENCRYPTBYKEY(KEY_GUID('MySymmetricKey'), '<String to encrypt>') 
CLOSE SYMMETRIC KEY MySymmetricKey 

Я могу резервное копирование базы данных Master Key и сертификат.

BACKUP MASTER KEY TO FILE = 'c:\temp\key' ENCRYPTION BY PASSWORD = '<Pass>'; 
BACKUP CERTIFICATE MyEncryptCert TO FILE = 'c:\temp\cert' WITH PRIVATE KEY(ENCRYPTION BY PASSWORD='<Pass>', FILE='C:\temp\cert.pvk') 

Но я не могу создать резервную копию Symmetric Key. Без этого я не могу расшифровать зашифрованные данные, если переместить зашифрованную таблицу в другую базу данных.

Есть ли какие-либо решения?

P.S. Я пробовал следующий код, но кажется, что это не безопасно для меня, потому что если вы знаете KEY_SOURCE и IDENTITY_VALUE вы на самом деле не нужен оригинальный мастер-ключ базы данных и сертификат для расшифровки данных

CREATE SYMMETRIC KEY MySymmetricKey WITH KEY_SOURCE = '<Pass1>', ALGORITHM = AES_256, IDENTITY_VALUE = '<Pass2>' ENCRYPTION BY CERTIFICATE MyEncryptCert 

ответ

0

Если вам нужно иметь возможность дублировать симметричный ключ, вы должны указать KEY_SOURCE и IDENTITY_VALUE. Ваша оценка верна в том, что, зная эти два значения, вы можете повторно создать ключ. Обратите внимание на следующий код, который показывает, что я могу создать тот же ключ дважды, что и доказательство, зашифровав значение с помощью «первого» ключа, отбросив ключ, перегенерировав его с теми же KEY_SOURCE и IDENTITY_VALUE, а затем расшифровывая зашифрованное значение ,

CREATE SYMMETRIC KEY MySymmetricKey WITH 
    KEY_SOURCE = '<Pass1>', 
    ALGORITHM = AES_256, 
    IDENTITY_VALUE = '<Pass2>' 
    ENCRYPTION BY Password = 'foobar!23' 

open symmetric key MySymmetricKey 
    decryption by password = 'foobar!23'; 
declare @encrypted varbinary(max); 
select @encrypted = ENCRYPTBYKEY(KEY_GUID('MySymmetricKey'), 'my secrets!'); 

close symmetric key MySymmetricKey; 
drop symmetric key MySymmetricKey; 

CREATE SYMMETRIC KEY MySymmetricKey WITH 
    KEY_SOURCE = '<Pass1>', 
    ALGORITHM = AES_256, 
    IDENTITY_VALUE = '<Pass2>' 
    ENCRYPTION BY Password = 'foobar!23' 

open symmetric key MySymmetricKey 
    decryption by password = 'foobar!23'; 

select cast(DECRYPTBYKEY(@encrypted) as varchar(max)) 
close symmetric key MySymmetricKey; 
drop symmetric key MySymmetricKey; 
+0

Благодарим за ответ. Вывод: я не могу выполнить резервное копирование Symmetric Key. –

+0

Не напрямую. Но вы можете воссоздать один и тот же ключ, предоставив тот же ключевой материал во время создания. Который так хорош, как резервное копирование. –