為什麼我無法通過前端恢復加密備份?
我剛剛開始嘗試加密備份,我想我現在理解它並且已經使該過程正常工作,但是還原時發生了一些奇怪的事情。
在伺服器 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 創建的數據庫備份: 您會看到它成功讀取了備份文件,並在還原數據庫螢幕的底部網格中顯示了備份集:
點擊確定,一切都成功恢復。(您可能需要進入“文件”螢幕來修改要恢復的數據文件的位置。)