如果我有一台使用 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)。服务主密钥用于保护服务器上的数据库标头。因为证书在备份中不是未加密的形式,所以不需要保护它,所以没有使用主密钥。