Sql-Server

為什麼我無法通過前端恢復加密備份?

  • October 31, 2019

我剛剛開始嘗試加密備份,我想我現在理解它並且已經使該過程正常工作,但是還原時發生了一些奇怪的事情。

伺服器 A(SQL 2014 標準)上,我創建了一個新的主密鑰和證書,並成功生成了一個加密的 bak 文件,並且還導出了密鑰和證書文件。

伺服器 B (SQL 2014 Developer) 上,我已成功從伺服器 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 上的密鑰始終打開一樣

我建議您嘗試拆除您的設置並重新開始。只要您的證書都到位,您*應該能夠從 SSMS GUI 恢復。*如果沒有您的設置腳本,就很難對可能出現的問題進行故障排除。

首先,在Server 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);

現在,我們將翻轉Server 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 創建的數據庫備份: 選擇備份設備 您會看到它成功讀取了備份文件,並在還原數據庫螢幕的底部網格中顯示了備份集: 恢復數據庫

點擊確定,一切都成功恢復。(您可能需要進入“文件”螢幕來修改要恢復的數據文件的位置。)

引用自:https://serverfault.com/questions/989930