是否可以通过还原MASTER数据库来恢复TDE证书?


10

(幸运的是,我们目前还没有处于这种情况下,只是提前计划,看看如果发生的话我们的选择将会是什么。)

对于使用透明日期加密(TDE)加密的数据库,除非您拥有用于对其进行加密的证书的备份,否则无法恢复该数据库备份的副本。

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

如果服务器整体出现故障,在新硬件上还原MASTER数据库的备份是否还会还原证书?

Answers:


9

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

这是TDE加密层次结构:

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

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

因此,在失败的情况下,您将必须还原足够的加密层次结构,以允许您读取TDE密钥。SQL Server在安装时创建服务主密钥;因此,在将主数据库还原到其他实例的同时,也将还原项目2和3,但不会显示解密它们所需的密钥。结果:无法读取的数据。

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

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

无论如何,您都将必须进行密钥/证书备份,因此要做好保护,并将其存储在冗余,安全的位置。仅仅拥有master的备份并不能使您摆脱TDE灾难。您将需要至少备份一个密钥或证书。


嗯,如何在不还原SMK(1)或master db DMK(2)的情况下还原另一台服务器上的证书呢?它是否将自己从新服务器“附加”到SMK / DMK?
BradC

嗯,我想我明白了:导出证书时,您明确提供了导出密钥,它取代了原始服务器对SMK / DMK的依赖。在新服务器上导入后,您将把依赖关系转移到新服务器的SMK / DMK上。听起来对吗?
BradC

是的,就是这样。导出或导入证书时,必须提供用于加密/解密备份的密码。还原备份时,将导入证书,并使用目标服务器的DMK重新加密该证书。
db2

5

1.如果您想照常将加密的备份还原到另一台服务器,则会遇到以下错误

 Cannot find server certificate with thumbprint …...

2.找到证书名称:在此示例中,vestacert

   SELECT  * FROM   sys.certificates

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#')

4,如果不存在的话,在UAT服务器上创建新的Master Cert

USE master GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'D1ffPa$$w0rd'

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#')

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

9,现在从UAT服务器创建一个新的备份并将其还原到最终服务器

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


1
由于日志文件仍具有加密内容,因此还原日志失败。禁用后,切换到“简单”模式,然后返回以截断日志并再次备份。
IDisposable

0

如果系统崩溃并变得无法使用,则只要您在新系统上使用相同的服务帐户,就可以构建新系统并在现有数据库上还原主数据库以恢复TDE证书。。然后,您应该重新启动系统,以通过本地计算机密钥修复Service Master Key的加密。之后,您应该能够备份TDE证书或还原用户数据库并访问数据。Windows Server的数据保护API通过两种方式来保护服务主密钥,一种是使用特定于系统的本地机器密钥,另一种是使用数据库引擎的服务帐户。由于系统崩溃,您将不再拥有原始系统的本地计算机密钥,因此必须使用相同的服务帐户。TDE证书与数据库一起备份,但是在加密层次结构完成之前不可访问。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.