如果我備份了我的證書,為什麼我需要備份 DMK?
如果我有一台使用 TDE 的伺服器,配置如下:
USE [master] CREATE DATABASE MyTDE CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'My57r0ngp455'; CREATE CERTIFICATE MyTDECert WITH SUBJECT = 'My Certificate'; GO /* enable TDE */ USE MyTDE; GO CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER CERTIFICATE MyTDECert; GO ALTER DATABASE MyTDE SET ENCRYPTION ON; GO /* backup the TDE cert */ USE [master]; BACKUP CERTIFICATE [MyTDECert] TO FILE = 'C:\Test\TDECert.cert' WITH PRIVATE KEY ( FILE = 'C:\Test\TDEcert.key', ENCRYPTION BY PASSWORD = 'MyStr0ngP455w0rd' );
我按計劃每晚備份:
BACKUP DATABASE MyTDE TO DISK = 'C:\Test\TDEDatabaseBackup.bak' WITH INIT, FORMAT;
如果執行此數據庫的伺服器發生某種災難,我需要將備份還原到另一台伺服器,為此,我需要備份
MyTDECert
以在新伺服器上重新創建該證書在新伺服器上,我可以從備份創建 TDE 證書:
USE [master]; GO CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'My57r0ngp4552'; CREATE CERTIFICATE MyTDE1 FROM FILE = 'C:\Test\TDEcert.cert' WITH PRIVATE KEY (FILE = 'C:\Test\TDEcert.key', DECRYPTION BY PASSWORD = 'MyStr0ngP455w0rd');
這允許我恢復數據庫:
RESTORE DATABASE MyTDE FROM DISK = 'C:\Test\TDEDatabaseBackup.bak'
同樣,如果我有一個未使用 TDE 的數據庫,但我使用證書進行備份:
USE [master] CREATE DATABASE MyDB CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'My57r0ngp455'; CREATE CERTIFICATE [BackupCert] WITH SUBJECT = 'Backup Certificate', EXPIRY_DATE = '2022-01-29T15:00:00' BACKUP CERTIFICATE [BackupCert] TO FILE = 'C:\Test\BackupCert.cert' WITH PRIVATE KEY ( FILE = 'C:\Test\backupcert.key', ENCRYPTION BY PASSWORD = 'MyStr0ngP455w0rd' ); BACKUP DATABASE MyDB TO DISK = 'C:\Test\EncryptedDBBackup.bak' WITH INIT, ENCRYPTION (ALGORITHM = AES_256, SERVER CERTIFICATE = BackupCert), FORMAT;
同樣,要將這些備份恢復到另一台伺服器,我需要
BackupCert
在第二台伺服器上創建證書的備份:USE [master]; GO CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'My57r0ngp4552'; CREATE CERTIFICATE [BackupCert] FROM FILE = 'C:\Test\STEVETEST\BackupCert.cert' WITH PRIVATE KEY (FILE = 'C:\Test\backupcert.key', DECRYPTION BY PASSWORD = 'MyStr0ngP455w0rd'); RESTORE DATABASE MyDB FROM DISK = 'C:\Test\EncryptedDBBackup.bak'
我不明白的是,我需要在master數據庫中備份數據庫主密鑰嗎?我仍然可以使用已備份的證書,並且可以在另一台伺服器上重新創建它們,並且它們具有正確的指紋來恢復加密的備份
看這篇文章,它表明如果我將創建密鑰的數據庫移動到另一台伺服器,我需要從備份中重新創建主密鑰,但就我而言,我並沒有移動主數據庫本身。
以上場景需要備份DMK嗎?
不,對於沒有 TDE 的數據庫,您不需要這樣做。
你混淆了兩件不同的事情:
數據庫主密鑰
- 不使用加密的數據庫:
如果您單獨備份證書,則通常不需要備份。您只需使用其證書從備份中恢復整個數據庫。如果您要保護數據庫中沒有其他備份(例如 DEK 或其他對稱密鑰)的機密,則只需要備份它。
- 使用任何形式加密的數據庫,例如 TDE 或 CLE
主密鑰保護另一個加密密鑰。因此,您可能有失去 DEK/其他加密密鑰的風險,因此您必須備份主密鑰才能恢復該資訊。即使您有單獨的備份證書,您也需要密鑰。
服務主密鑰如果您打算恢復數據庫,
您只需要備份服務主密鑰,並且您無權訪問備份,只能訪問文件。請注意,連結伺服器憑據之類的內容儲存在此處,因此您可能希望能夠恢復這些內容,但這通常不是必需的。
master``master``.mdf
在將數據庫證書恢復到伺服器之前,您確實需要創建一個新的服務主密鑰(自動創建)和數據庫主密鑰,因為它需要在那裡保護。但是,您可以恢復備份。
其他數據庫的備份僅使用它們自己的證書進行加密。數據庫主密鑰保護數據庫標頭中的證書(以及啟用 TDE 的數據庫的 DEK)。服務主密鑰用於保護伺服器上的數據庫標頭。因為證書在備份中不是未加密的形式,所以不需要保護它,所以沒有使用主密鑰。