Sql-Server-2016

如果我備份了我的證書,為什麼我需要備份 DMK?

  • January 5, 2022

如果我有一台使用 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)。服務主密鑰用於保護伺服器上的數據庫標頭。因為證書在備份中不是未加密的形式,所以不需要保護它,所以沒有使用主密鑰。

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