如何复制SQL Server对称密钥?

时间:2010-04-02 20:07:41

标签: sql sql-server-2008 symmetric-key

我们有一台服务器,其数据库具有对称密钥(数据库 - >安全 - >对称密钥)。我们有一个备份重复数据库,我们将其用作测试数据库,但我们没有此密钥。

如何复制这个对称密钥(或创建一个与旧密钥完全相同的新密钥)并将其放入现有数据库中?它必须与另一个具有相同的值和键名。

这是在SQL Server 2008上。

alt text http://i39.tinypic.com/mhwnds.png

1 个答案:

答案 0 :(得分:7)

首先创建对称密钥时,请确保使用KEY_SOURCE,IDENTITY_VALUE和ALGORITHM参数。

如果您还没有,请创建数据库主密钥和证书以保护对称密钥。

-- Create Database Master Key 
CREATE MASTER KEY ENCRYPTION BY
PASSWORD = 'Your Database Master Key Password here' 
GO

-- Create Encryption Certificate 
CREATE CERTIFICATE MyCertificateName
WITH SUBJECT = 'Your Certificate Description Here' 
GO

-- Create Symmetric Key
CREATE SYMMETRIC KEY MyKeyName WITH
IDENTITY_VALUE = 'Enter a key description',
ALGORITHM = AES_256, 
KEY_SOURCE = 'Enter a key phrase here (keep very secret)'
ENCRYPTION BY CERTIFICATE MyCertificateName;
  • IDENTITY_VALUE参数用于在sys.symmetric_keys表中创建guid,两个数据库中的guid都必须相同才能工作。

  • KEY_SOURCE参数用于创建实际的密钥本身,因此请确保它完全相同且受到良好保护。

  • 算法当然是sql server用来加密和解密数据的算法,这些算法必须相同才能工作。

您应该能够在两个数据库上运行上述脚本(当然用您自己的值替换),它将成功解密在其他数据库中加密的数据。

如果您的现有密钥不是以这种方式创建的,那么您将不得不使用旧密钥解密所有密钥,并使用新密钥重新加密。

有关密钥创建的几个好消息来源可以在这里找到: