假设我有一个生产服务器,并且##MS_DatabaseMasterKey##
上面有一个数据库主密钥 (master_key1)。我创建了一个证书c1
,默认情况下由 master_key1 加密。然后我支持c1
以下声明。
BACKUP CERTIFICATE c1 TO FILE = 'c:\c1.crt'
WITH PRIVATE KEY
(
FILE = 'c:\c1_private_key.key',
ENCRYPTION BY PASSWORD = 'c1_private_key_password'
);
之后,我将三个c1
备份相关文件复制到开发服务器。在开发服务器上,我创建了一个新的数据库主密钥。它仍然被称为##MS_DatabaseMasterKey##
,但它是一个新创建的(我们称之为 master_key2)。现在我c1
在开发服务器上恢复:
CREATE CERTIFICATE c1
FROM FILE = 'c:\c1.crt'
WITH PRIVATE KEY
(
FILE = 'c:\c1_private_key.key',
DECRYPTION BY PASSWORD = 'c1_private_key_password'
);
问题:
- 在开发服务器上恢复后
c1
,它是否被加密master_key2
?这里好像没碰过master_key2
。 - 当我在开发服务器上恢复
c1
时,我可以将其名称更改为喜欢c2
(CREATE CERTIFICATE c2 ...
)吗?如果我这样做,生产服务器上的 TDE 加密备份可以在开发服务器上恢复吗?
此时文件 c1.crt 未加密,文件 c1_private_key.key 被加密
PASSWORD = 'c1_private_key_password'
此时证书 c1 存在于任何数据库中,该数据库默认由该数据库的数据库主密钥加密。
正确的。
如果你想。
TDE DEK 密钥受主数据库中的服务器证书(在您的情况下但可以通过其他方式保护)的保护。如果具有该指纹的证书不存在或无法打开,则 TDE 将无法用于该数据库。在您的情况下,它应该没有任何问题,因为指纹是相同的,并且可以访问证书来解密 DEK。是的,它可以恢复。不过,我会保持证书名称相同,或者更好的是,使用不同的证书,因为现在您的生产证书在您的开发服务器上。TDE 用于静态数据,因此只有在您希望有人窃取您的备份或驱动器时才真正重要,除了它不保护任何东西。