类似的问题是asked before,但我认为情况略有不同,我也想了解任何其他解决方案。我现在处于信息过载的阶段:\
SERVER A上数据库上的某些列已使用此方法加密:
-- Key creation
USE [master];
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'ComplexPasswordHere';
CREATE CERTIFICATE MyDbCertificate01 WITH SUBJECT = 'MyDatabase Certificate 01';
CREATE SYMMETRIC KEY SSN_Key_01 WITH ALGORITHM = TRIPLE_DES ENCRYPTION BY CERTIFICATE MyDbCertificate01;
-- Decryption example
USE [MyDB];
GO
OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE MyDbCertificate01;
SELECT
CONVERT(nvarchar(50), DECRYPTBYKEY(PasswordEnc)) AS [Password]
FROM
[tbl_Users]
CLOSE SYMMETRIC KEY SSN_Key_01;
此数据库需要恢复到SERVER B上,该服务器B已经有一个服务主密钥,用于管理该服务器上其他数据库的加密。
从研究中,其他作者表示我们可以使用FORCE
备份/恢复SMK,但我认为这会消除目标服务器上的现有加密:
问题在于:当前的机器DMK无法使用 用另一个SMK加密的数据。它将无法解密,因为 SMK已经改变了。 Source
假设上述内容仍然准确,是否可以备份数据库以及证书,以使目标服务器能够成功解密数据?
有没有其他方法可以在不损坏目标服务器现有数据的情况下实现这一目标?
答案 0 :(得分:0)
因此,随着压力的增加,我决定取出我的钱包,并设置一个新的Azure VM测试服务器,保证全新的设置。
解决方案结果如下(尽可能提供链接)。
使用instructions here(SSMS还原对话框,覆盖必要的字段)还原数据库。 此时,加密的数据库字段尚无法解密
一旦恢复,事实证明this answer on dba.stackexchange是必需的(根据我的问题进行了修改)。
USE [MyRestoredDatabase]
GO
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'ComplexPasswordHere'; -- This is the password used for --> CREATE MASTER KEY ENCRYPTION BY PASSWORD '....';
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY;
GO
从那时起,DECRYPTBYKEY()
和其他加密工作正常。
如果我的假设不正确,请发一个澄清错误的答案,我会接受你的回答......
根据我对新VM的研究,似乎在备份数据库时,证书和对称密钥会作为数据库的一部分自动备份(这非常有意义)。因此,最后一步是配置要还原的现有数据库主密钥,以便在目标计算机上的服务主密钥的控制之下。 SSMS自动重新布线。
答案 1 :(得分:0)
忘记了再次执行此操作的详细信息,不得不去寻找一下,所以对于可能需要它的人来说,只是一些额外的信息。
至少有两种方法可以完成此操作,第二种方法非常有用,如果您无法掌握数据库密钥的密码,但您是SQL Server管理员。
在这种情况下,您只需导出 Server 主密钥,然后在还原备份数据库之前在目标服务器 中覆盖它。当然,这只能在新服务器上使用,或者在尚未使用证书的服务器上使用,或者在极端情况下,如果您知道目标中所有证书的密钥密码,并且可以按照EvilDr的描述将其重置,则只能使用此服务器。 >
USE MASTER
GO
--On original SQL Server set password
BACKUP SERVICE MASTER KEY TO FILE = 'C:\temp\smk' ENCRYPTION BY PASSWORD = 'password';
GO
--On new SQL Server - BEFORE restoring backed up database (or else conflict)
RESTORE SERVICE MASTER KEY FROM FILE = 'C:\temp\smk' DECRYPTION BY PASSWORD = 'password';
GO
--Then restore database from backup with certificate and key included