为什么我不能通过前端恢复加密备份?

为什么我不能通过前端恢复加密备份?

我刚刚开始尝试加密备份,我想我现在明白了它并且已经让该过程正常运行,但恢复时发生了一些奇怪的事情。

服务器 A(SQL 2014 标准)我创建了一个新的主密钥和证书,并成功生成了加密的 bak 文件,并且还导出了密钥和证书文件。

服务器 B(SQL 2014 开发人员)我已成功从服务器 A 恢复主密钥和证书。

我知道这些工作正常,因为我可以使用以下语法将加密的 bak 文件成功恢复到两个服务器:

OPEN MASTER KEY DECRYPTION BY PASSWORD = 'xxx';
RESTORE DATABASE testDb FROM DISK = 'C:\testDb.bak' WITH STATS = 5;
CLOSE MASTER KEY;

但使用还原数据库SSMS 中的工具。

恢复到服务器 A 时工作正常。

但是当使用 UI 恢复到服务器 B 时,它只会显示一条基本消息“未选择要恢复的备份集“”。

为什么会这样?

更新:我刚刚注意到,在使用命令恢复备份时,如果我先打开主密钥,它才会在服务器 B 上起作用,否则它会显示消息Please create a master key in the database or open the master key
在服务器 AI 上不需要这样做,就好像密钥在服务器 A 上始终处于打开状态一样

答案1

我建议你尝试拆除你的设置并重新开始。你应该只要您的证书都已到位,就可以从 SSMS GUI 进行恢复。如果没有设置脚本,很难排除可能出现的问题。

首先,服务器 A,你需要创建一个主密钥:

USE master
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'SecretPassword!';

然后,创建用于备份的证书:

USE master
GO
CREATE CERTIFICATE BackupEncryptTestCert
    WITH SUBJECT = 'AMtwo_BackupCertificate';

并备份该证书,以便您可以在另一台服务器上恢复它:

BACKUP CERTIFICATE BackupEncryptTestCert
    TO FILE = 'C:\temp\AMtwo_BACKUP_CERTIFICATE.cer'
    WITH PRIVATE KEY
    (
        FILE = 'C:\temp\AMtwo_BACKUP_CERTIFICATE_PRIVATE_KEY.key',
        ENCRYPTION BY PASSWORD = 'Super-DuperSecretPassword!'
    );

现在,获取您的加密备份(您可以使用 GUI,但这是 T-SQL):

BACKUP DATABASE Floop 
    TO  DISK = N'C:\SQL\BAK\Floop.bak' 
    WITH INIT, FORMAT,
        ENCRYPTION(ALGORITHM = AES_256, SERVER CERTIFICATE = BackupEncryptTestCert);

现在我们来翻一下服务器 B,并创建一个主密钥(注意:我实际上不需要从其他服务器备份/恢复主密钥):

USE master
GO
CREATE CERTIFICATE BackupEncryptTestCert
    WITH SUBJECT = 'AMtwo_BackupCertificate';

现在从备份中创建该证书:

CREATE CERTIFICATE BackupEncryptTestCert 
    FROM FILE ='C:\temp\AMtwo_BACKUP_CERTIFICATE.cer'
    WITH PRIVATE KEY
    (
        FILE='C:\temp\AMtwo_BACKUP_CERTIFICATE_PRIVATE_KEY.key', 
        DECRYPTION BY PASSWORD = 'Super-DuperSecretPassword!'
    );

最后,转到恢复数据库 GUI,并选择我们从服务器 A 创建的数据库备份: 选择备份设备 您将看到它成功读取了备份文件,并在“恢复数据库”屏幕的底部网格中显示备份集: 还原数据库

点击“确定”,所有内容均成功恢复。(您可能需要转到“文件”屏幕来修改要恢复的数据文件的位置。)

相关内容