将 TDE 数据库移动到新数据库但证书有问题

Ken*_*her 5 sql-server-2008-r2 transparent-data-encryption

这是我第一次使用 TDE,所以希望我没有做任何可怕的错误。

我正在尝试将我的 TDE 数据库从一台服务器移动到另一台服务器。我在新服务器的主数据库上创建了一个主密钥。然后我使用以下命令从备份中恢复了我的证书:

CREATE CERTIFICATE MyServerCert
FROM FILE = 'CertBackupFile'
Run Code Online (Sandbox Code Playgroud)

当我最初创建它时,我没有私人加密密钥,所以我只是用密码对其进行了加密。

现在,当我尝试恢复 TDE 的备份时,出现以下错误

Msg 15507, Level 16, State 1, Line 2
A key required by this operation appears to be corrupted.
Msg 3013, Level 16, State 1, Line 2
RESTORE DATABASE is terminating abnormally.
Run Code Online (Sandbox Code Playgroud)

我试过查看 create 语句,但看不到我可以在哪里输入原始密码。此外,当我查看原始服务器上的 sys.certificates pvt_key_encryption_type_desc = ENCRYPTED_BY_MASTER_KEY 时,但在新服务器上显示 NO_PRIVATE_KEY。所以我认为我在创建时做错了。

谁能指出我正确的方向来解决这个问题?

Spö*_*rri 5

您将需要在新服务器上创建主密钥 - 如果它尚未存在。

USE MASTER;
GO
if not exists (select 1 from sys.symmetric_keys where name = '##MS_DatabaseMasterKey##')
 CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Strong_Password';
Run Code Online (Sandbox Code Playgroud)

然后你必须恢复你的证书:

CREATE CERTIFICATE serverCert  FROM FILE = 'C:\cert_Backups\servercert.cer'     
WITH PRIVATE KEY (FILE = 'C:\cert_Backups\servercert.key'
    ,DECRYPTION BY PASSWORD = 'strong_Passw0rD')
GO 
Run Code Online (Sandbox Code Playgroud)

但要使其发挥作用,您必须确保使用私钥对原始证书进行了备份。

Backup certificate ServerCert 
 to file = 'C:\cert_Backups\servercert.cer'
 with private key (file = 'C:\cert_Backups\servercert.key',
 encryption By Password = 'strong_Passw0rD')
GO
Run Code Online (Sandbox Code Playgroud)

如果您只有 cer 文件而没有密钥,则需要再次备份证书