如何在SQL Server中备份对称密钥?

时间:2016-12-08 05:01:21

标签: sql sql-server database encryption symmetric-key

我使用下一个代码来创建SQL加密密钥

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

我可以备份数据库主密钥和证书。

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

2 个答案:

答案 0 :(得分:1)

如果您需要能够复制对称密钥,则应提供KEY_SOURCEIDENTITY_VALUE。您的评估是正确的,因为通过了解这两个值,您可以重新创建密钥。观察以下代码,该代码显示我可以创建相同的密钥两次,因为我使用“first”键加密值,删除密钥,使用相同的KEY_SOURCE和{{1}重新生成密钥然后解密加密值。

IDENTITY_VALUE

答案 1 :(得分:0)

你不能。

如另一个答案中所述,可以使用相同的参数重新创建相同的对称密钥,但是这在不同版本的SQL Server之间不起作用。