我可以通过恢复 MASTER 数据库来恢复 TDE 证书吗?

Bra*_*adC 10 sql-server encryption transparent-data-encryption disaster-recovery

(幸运的是,我们目前并未处于这种情况,只是提前计划,看看如果发生这种情况,我们的选择是什么。)

对于使用透明日期加密 (TDE) 加密的数据库,除非您有用于加密它的证书的备份,否则数据库备份的副本是不可恢复的。

如果你没有那个怎么办?还有其他选择吗?

如果整个服务器发生故障,在新硬件上恢复 MASTER 数据库的备份是否也会恢复证书?

db2*_*db2 9

由于 TDE 依赖于存储在 master 中的证书(用于加密数据库加密密钥),因此只有您可以将 master 数据库以可以解密证书的方式将 master 数据库还原到另一台服务器时,这才有效。

这是 TDE 加密层次结构:

  1. 服务主密钥(受 Windows 保护;绑定到服务帐户凭据和机器密钥)
  2. 数据库主密钥(在这种情况下,主数据库的密钥)
  3. 证书
  4. TDE 加密密钥

前三项存储在主数据库中,并且都可以备份。第四个存储(由来自 #3 的证书加密)在加密数据库的标题中。

因此,在出现故障的情况下,您必须恢复足够多的加密层次结构以允许您读取 TDE 密钥。SQL Server 在安装时创建服务主密钥;因此,虽然将 master 数据库恢复到不同的实例也将恢复项目 2 和 3,但解密它们所需的密钥将不存在。结果:无法读取的数据。

两个最好的选择是从备份中恢复证书 (#3)(如果由于某种原因无法恢复主数据库,这是一个不错的选择),或者从备份中恢复主数据库及其主密钥 (#2)。如果您有很多受此密钥保护的证书/密钥,并且需要同时访问它们,那么恢复主密钥可能是更好的选择。这与通常与恢复 master 数据库(排序规则、登录名、数据库名称和文件路径等)相关的预防措施相同。

通常,我只建议在恢复场景中恢复 master。对于迁移/横向扩展方案(例如使用可用性组/使用 TDE 加密数据库进行镜像),最好备份/恢复证书(#3),以便使用其移动的每个实例唯一的主密钥对其进行加密到。您需要在证书备份中包含私钥。

在任何情况下,您都必须进行密钥/证书备份,因此请妥善保护它们,并将它们存储在冗余、安全的位置。简单地备份 master不会让您摆脱 TDE 灾难;您将需要至少备份一个密钥或证书。


Ima*_*man 5

1.如果您想像往常一样将加密备份恢复到另一台服务器,您会遇到以下错误

 Cannot find server certificate with thumbprint …...
Run Code Online (Sandbox Code Playgroud)

2.找到证书名称:在本例中为vestacert

   SELECT  * FROM   sys.certificates
Run Code Online (Sandbox Code Playgroud)

3.从源服务器(源加密服务器)备份证书:

BACKUP CERTIFICATE vestacert
TO FILE = 'c:\Backup\certificate_TDE_Test_Certificate.cer'
WITH PRIVATE KEY
(FILE = 'c:\Backup\certificate_TDE_Test_Key.pvk',
ENCRYPTION BY PASSWORD = 'Password12#')
Run Code Online (Sandbox Code Playgroud)

4.如果尚未存在,则在 UAT 服务器上创建新的 Master Cert

USE master GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'D1ffPa$$w0rd'
Run Code Online (Sandbox Code Playgroud)

5.在UAT服务器(UATserver)中恢复备份证书

CREATE CERTIFICATE vestacert2
FROM FILE = 'C:\tmp\certificate_TDE_Test_Certificate.cer'     
WITH PRIVATE KEY (FILE = 'C:\tmp\LCMS\certificate_TDE_Test_Key.pvk', 
DECRYPTION BY PASSWORD = 'Passsword12#')
Run Code Online (Sandbox Code Playgroud)

6.此步骤后恢复备份没有任何错误,所有数据都是可读的。

7.但有趣的是,简单地删除加密并进行新备份并在最终服务器(最终服务器)上恢复它不起作用并给出以下错误文件“mydb_log”未能正确初始化。检查错误日志以获取更多详细信息。

8.从UAT中删除加密的正确方法是从下到上一步一步地删除所有像下面这样的标志

    USE master
    ALTER DATABASE mydb SET ENCRYPTION OFF
    USE mydb
    DROP DATABASE ENCRYPTION KEY 
    USE master
    DROP CERTIFICATE vestacert2 
    DROP MASTER KEY
Run Code Online (Sandbox Code Playgroud)

9.现在从UAT服务器创建一个新的备份并将其恢复到最终服务器

好文章:http : //sqlserverzest.com/2013/10/03/sql-server-restoring-a-tde-encrypted-database-to-a-different-server/