我是否需要备份SQL Serverencryption密码和对称密钥?

我试图设置SQL Server在一些敏感数据上使用单元级encryption。 在MSDN上的这个例子看起来很简单:

  1. 使用强密码创build主密钥
  2. 创build一个证书
  3. 用证书创build一个对称密钥。
  4. 按照需要使用EncryptByKey函数对数据进行encryption,如下所示: EncryptByKey(Key_GUID('SensitiveData_Key_01'), MySensitiveDataColumn)
  5. 使用DecryptByKey函数解密数据,如下所示: CONVERT(varchar, DecryptByKeyAutoCert(cert_ID('MyCertName'), NULL, MySensitiveDataColumn))

所以考虑到上面的用法,假设我的服务器死了。 我需要在全新的Windows机器(或VM)上重新安装SQL Server,并从备份恢复数据库。 如果我恢复数据库备份将encryption/解密继续正常工作?

如果没有,我需要保存/备份哪些数据才能在发生灾难性故障的情况下恢复数据?

从另一个关于encryption层次结构的MSDN文章的图表来看,我的猜测是我需要备份下面的一些或全部内容:

  1. 主密钥的密码
  2. 主密钥?
  3. 证书?
  4. 对称密钥?

在做了更多的研究之后,我发现了这篇关于“克隆”对称密钥的文章 。

您可以指示CREATE SYMMETRIC KEY函数使用KEY_SOURCEIDENTITY_VALUE生成对称密钥。 稍后您可以通过为KEY_SOURCEIDENTITY_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 

引用Michael Coles的文章

“对于我的口味,默认情况下要求IDENTITY_VALUE和KEY_SOURCE选项更有意义。”

不知道为什么他们不这样做,或者至less强调,在他们的例子中,他们已经在MSDN上!

你应该模拟你提出的灾难,并确认你可以在testing机器上恢复。 无论您需要什么,恢复过程中都会变得非常快速。