使用 SQL Server 中的加密列还原数据库,而无需覆盖现有的服务主密钥

Raz*_*anu 4 sql-server encryption restore

设想:

Server1 运行 SQL Server 2012,带有服务主密钥 A,db1 带有数据库主密钥 1,对称密钥和证书可用。用于保护 DBMK 1 的密码未知,SMK A 启用加密。

Server2 运行带有 SMK B 的 SQL Server 2012,带有 DBMK 2 的 db2,对称密钥和证书可用。用于保护 DBMK 2 的密码未知,SMK B 用于加密。

需要将 db2 恢复到 Server1。表中有一个加密列,用于存储内部 ASP.NET 应用程序的密码。还有其他应用程序访问 Server1 上的 db1 中的加密数据。

题:

将 db2 恢复到 Server1 并访问加密数据而不会对 db1 造成问题的最佳选择?

测试:

简单的restore会把db2的数据、对称密钥和证书带到Server1,但是SMK A不能用来解密数据:“请在数据库中创建主密钥或者在会话中打开主密钥,然后再执行此操作.” 在测试服务器上恢复了 SMK B,一切都很好。无法在 Server1 上使用此解决方案,因为我相信将 SMK B 恢复到 Server1(覆盖 SMK A)将禁止我访问 db1 中的加密数据。不希望发生这种情况。

有什么建议吗?谢谢你。

Rem*_*anu 5

Server1 运行 SQL Server 2012,带有服务主密钥 A,db1 带有数据库主密钥 1,对称密钥和证书可用。

我假设 db1 主密钥是用 SMK 加密的。这使得由数据库主密钥加密的所有内容对应用程序“可用”,而无需显式打开数据库主密钥。

您需要做的是恢复数据库,使用 DBMK 密码打开数据库主密钥,然后将 Server 2 SMK 加密添加到 DBMK:

RESTORE DATABESE ... FROM ...;
USE ...;
OPEN MASTER KEY DECRYPTION BY PASSWORD = ...;
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY;
Run Code Online (Sandbox Code Playgroud)