我需要备份 SQL Server 加密密码和对称密钥吗?

我需要备份 SQL Server 加密密码和对称密钥吗?

我正在尝试设置 SQL Server 对一些敏感数据使用单元级加密。这似乎很简单MSDN 上的这个例子

  1. 使用强密码创建主密钥。
  2. 创建证书。
  3. 使用证书创建对称密钥。
  4. 使用EncryptByKey如下函数根据需要加密数据:EncryptByKey(Key_GUID('SensitiveData_Key_01'), MySensitiveDataColumn)
  5. 根据需要使用DecryptByKey如下函数解密数据:CONVERT(varchar, DecryptByKeyAutoCert(cert_ID('MyCertName'), NULL, MySensitiveDataColumn))

鉴于上述使用情况,假设我的服务器死机了。我需要在一台全新的 Windows 机器(或 VM)上重新安装 SQL Server,并从备份中恢复我的数据库。 如果我恢复数据库备份,加密/解密是否会继续正常工作?

如果不是,我需要保存/备份哪些数据才能在发生灾难性故障时恢复我的数据?

从图表来看有关加密层次结构的另一篇 MSDN 文章,我猜我需要备份以下部分或全部内容:

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

答案1

经过进一步的研究,我发现了这篇文章“克隆”对称密钥

您可以指示函数使用和CREATE SYMMETRIC KEY生成对称密钥。稍后,您可以通过为和传递相同的值来重新生成相同的密钥。KEY_SOURCEIDENTITY_VALUEKEY_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

引用迈克尔·科尔斯的文章

“就我而言,默认要求 IDENTITY_VALUE 和 KEY_SOURCE 选项更有意义。”

不确定他们为什么不那样做,或者至少在 MSDN 上的例子中强调这一点!

答案2

您应该模拟您设想的灾难,并确认您可以在测试机器上恢复。您需要的一切在恢复过程中应该很快就会显现出来。

相关内容