将加密的数据库还原到另一台服务器


10

我正在使用在SQLServer 2008上运行的产品。可以理解的是,提供该产品的公司不提供SQLServer支持。安装产品时,我指定了密码来加密数据库。我想运行该产品的另一个副本,以便在另一台服务器上进行测试。我已将数据库还原到另一台服务器,并将产品安装在另一台服务器上。安装后,我提供了相同的密码,然后从主服务器还原了备份。但是我收到错误消息:

System.Data.SqlClient.SqlException: An error occurred during decryption.

从产品。我可以使用SQLServer Management Studio访问表。

我已经试过了:

在第一台服务器上:

CREATE CERTIFICATE cert1 WITH SUBJECT = 'Certificate for my stuff'

BACKUP CERTIFICATE  cert1 TO FILE = 'd:\backup\cert1.dat' 
WITH PRIVATE KEY 
(
ENCRYPTION BY PASSWORD = 'mypassword',
FILE = 'd:\backup\cert1_privatekey.dat'
)

在第二台服务器上:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'mypassword'

CREATE CERTIFICATE cert1 FROM FILE = 'd:\cert1.dat'
WITH PRIVATE KEY
(
FILE = 'd:\cert1_privatekey.dat',
DECRYPTION BY PASSWORD = 'mypassword'
)

我也在第二台服务器上尝试过此操作:

alter MASTER KEY regenerate with enCRYPTION BY PASSWORD='password'

但这给出了有关非对称密钥的错误消息。

如何将备份从第一台服务器还原到第二台服务器?

更新:

数据库中也有一个非对称和对称密钥。如果我使用非对称密钥打开对称密钥,则会遇到相同的错误,因此我认为这就是它不起作用的原因-某种程度上,密钥没有以可以使用的方式进行传输。

Answers:


8

了一篇有关镜像和TDE的博客文章。

我花了一段时间才弄清楚,要在辅助服务器上获取数据库,我需要代码行:

 OPEN MASTER KEY DECRYPTION BY PASSWORD = 'SomePassword'
 ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
 GO

该密码与我用来加密主密钥文件的密码相同。在第二台SQL服务器上发出命令后,一切运行良好。也是我所做的db.stackexchange帖子。


该博客条目非常有用。我遵循了它,除了使用“我要复制”的特定数据库而不是“ master”。我收到错误消息“解密由旧主密钥加密的非对称密钥'asym_something'时发生错误。FORCE选项可用于忽略此错误并继续操作,但是旧主密钥无法解密的数据将不可用。” 当我从文件中还原主密钥时。我应该强迫它吗?(这是在我恢复数据库之后,而您的指示将在以后恢复。)
paulmorriss 2011年

1
谢谢,花了我很长时间才弄清楚。eek,我不确定你应该强迫它。据我了解,“密钥”与每台服务器上的MASTER数据库绑定在一起。唯一与数据库绑定的是由主密钥签名的证书。因此,您需要在server1上创建一个主密钥,对其进行备份,然后在服务器2上还原该密钥,然后移至数据库的证书上方。我希望其他人能对此有所启发。
RateControl 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.