将加密的数据库恢复到另一台服务器

pau*_*iss 10 sql-server-2008 sql-server backup restore

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

System.Data.SqlClient.SqlException: An error occurred during decryption.
Run Code Online (Sandbox Code Playgroud)

从产品。我可以使用 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'
)
Run Code Online (Sandbox Code Playgroud)

在第二台服务器上:

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'
)
Run Code Online (Sandbox Code Playgroud)

我也在第二台服务器上试过这个:

alter MASTER KEY regenerate with enCRYPTION BY PASSWORD='password'
Run Code Online (Sandbox Code Playgroud)

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

如何将备份从第一台服务器恢复到第二台服务器?

更新:

数据库中也有非对称和对称密钥。如果我使用非对称密钥打开对称密钥,我会得到同样的错误,所以我认为这就是它不起作用的原因 - 不知何故,密钥没有以可以使用的方式传输。

Rat*_*rol 8

了一篇关于镜像和 TDE 的博客条目。

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

 OPEN MASTER KEY DECRYPTION BY PASSWORD = 'SomePassword'
 ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
 GO
Run Code Online (Sandbox Code Playgroud)

密码与我用来加密主密钥文件的密码相同。在第二个 SQL 服务器上发出命令后,一切都很好。是我也发表的 db.stackexchange 帖子。