Sql-Server

如何生成恢復加密備份所需的私鑰?

  • April 22, 2022

我正在模擬從實例A備份並在實例****B上恢復它的情況。我按照文件到Backup to Disk with Encryption。由於我只使用我的桌面來模擬整個過程,所以在備份數據庫後,我對使用的證書進行了備份,如下所示:

BACKUP CERTIFICATE MyTestDBBackupEncryptCert
TO FILE = N'C:\Databases\MyTestDBBackupEncryptCert.cert';

然後我MyTestDBBackupEncryptCert從我的實例中刪除了證書和數據庫來模擬它現在是實例B我使用從文件創建證書doc中的命令恢復了證書,並稍作修改,在其中我註釋了與PRIVATE KEYDECRYPTION選項相關的行,因為證書是由 加密的MASTER KEY(嗯,這就是我從第一個連結中理解的):

CREATE CERTIFICATE MyTestDBBackupEncryptCert   
   FROM FILE = N'C:\Databases\MyTestDBBackupEncryptCert.cert'   
   --WITH PRIVATE KEY (FILE = 'c:\Shipping\Certs\Shipping11.pvk',   
   --DECRYPTION BY PASSWORD = 'sldkflk34et6gs%53#v00');  
GO 

證書已創建,但當我嘗試恢復數據庫時,出現此錯誤:

消息 15507,級別 16,狀態 30,行 33
此操作所需的密鑰似乎已損壞。
消息 3013,級別 16,狀態 1,第 33 行
RESTORE DATABASE 異常終止。

該文件沒有說明如何獲取正確恢復證書所需的私鑰。如何從 SQL Server 獲取它?

私鑰用作BACKUP CERTIFICATE語法的一部分。根據docs,語法是:

BACKUP CERTIFICATE certname TO FILE = 'path_to_file'  
   [ WITH PRIVATE KEY   
     (   
       FILE = 'path_to_private_key_file' ,  
       ENCRYPTION BY PASSWORD = 'encryption_password'   
       [ , DECRYPTION BY PASSWORD = 'decryption_password' ]   
     )   
   ]  

正如您所發現的,BACKUP CERTICIATE沒有私鑰的“簡單”不足以恢復用於解密。要使您的證書備份對恢復加密備份有用,您必須備份證書WITH PRIVATE KEY

一旦你知道了這一點,就更容易記住了,因為你需要密鑰來解鎖加密——但是“簡單”的證書備份可以在沒有任何警告的情況下進行這一事實確實代表了一個很大的陷阱,也證明了測試的重要性您的恢復策略,尤其是在涉及加密密鑰時。

引用自:https://dba.stackexchange.com/questions/311218