TDE开启模式下恢复数据库备份

 

TDE是“透明数据加密”(Transparent Data Encryption),为SQL server 2008的一个新功能。(更多介绍,请参考https://msdn.microsoft.com/zh-cn/library/bb934049.aspx

 

此案例将介绍如何重置TDE(即,移除所有TDE设置,重新打开TDE), 并在TDE开启的模式下恢复数据库备份。

 

其中我们需要特别注意的是,当移除TDE设置时,如果只移除证书但不移除数据库的加密密钥,数据库则不能启动,即使该数据库已经完全解密。 此外,当数据库没有打开TDE但保留了密钥时,数据库不可在另外一个服务器上恢复。 必须首先在目标服务器上恢复证书和主密钥(master key),或者在备份数据库前首先移除数据库密钥。

 

以下是清理TDE设置,重新打开TDE和恢复备份的一些步骤 (红色文本需要根据您的需求进行修改)。

 

         1. 移除所有TDE相关的密钥和证书,以便从头来过:(可选)

   --首先关闭 数据库加密。解密操作将启动

 

                                               ALTER DATABASE TDE2

                                               SET ENCRYPTION OFF

 

/*对于大型数据库,解密操作需要等待一段时间, 可用以下语句查询,encryption_state 为1代表没有加密(即,解密完成)*/

 

                                              Use TDE2

                                              GO

                                             select DB_NAME(database_id) , encryption_state from sys.dm_database_encryption_keys

                                              GO

/*移除数据库加密密钥。注意,本操作只是移除某个特定的数据库的密钥(例如本范例中的TDE2)。如果我们需要清理多个数据库,则需要对这些数据库重复前三个步骤*/

                                             Use TDE2

                                             GO

                                             DROP DATABASE ENCRYPTION KEY;

                                             GO

 

   --在进行下一步之前确认您已经备份了证书和主密钥

   --备份数据库主密钥和证书的语句:

use Master

Backup master key to file = 'C:\old\MasterKey' encryption by password = 'Password123'

BACKUP CERTIFICATE myservercert_Test TO FILE = 'c:\old\myservercert.cert'

WITH PRIVATE KEY ( FILE = 'C:\old\ServerCert_Test.pvk' , ENCRYPTION BY PASSWORD = '997jkhUbhk$w4ez0876hKHJH5gh' );

  --移除证书

Use master

GO

drop certificate myservercert_Test

 --最后移除master key

Use master

GO

                             drop master key

 

  

 --验证数据库仍可访问

                            Use TDE2

 

       2.现在我们从头开始启动所有TDE步骤。

                     

  在源数据库服务器上:

--在master数据库中创建主密钥

Use Master

go

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Password123';

Go

 

--在master数据库中创建证书

Use Master

go

CREATE CERTIFICATE MyServerCert_Test WITH SUBJECT = 'My DEK Certificate'

Go

 

--备份数据库主密钥和证书

use Master

Backup master key to file = 'C:\MasterKey' encryption by password = 'Password123'

BACKUP CERTIFICATE myservercert_Test TO FILE = 'c:\myservercert.cert'

WITH PRIVATE KEY ( FILE = 'C:\ServerCert_Test.pvk' , ENCRYPTION BY PASSWORD = '997jkhUbhk$w4ez0876hKHJH5gh' );

--在用户数据库中创建数据库加密密钥(DEK)

use TDE2

Create DATABASE ENCRYPTION KEY

WITH ALGORITHM = AES_256

ENCRYPTION BY SERVER CERTIFICATE MyServerCert_Test

 

--激活数据库加密

ALTER DATABASE TDE2

SET ENCRYPTION ON

 

/*确认数据库是否已被加密。注意Tempdb也会被标记为加密*/

select DB_NAME(database_id) ,* from sys.dm_database_encryption_keys

 

--备份数据库

Backup database TDE2 to disk='c:\TDE2.bak'

在目标数据库服务器上:(请复制数据库备份文件,主密钥和证书备份文件到目标服务器)

/*接下来的步骤将在目标服务器上恢复数据库*/

/*第一步是恢复主密钥。 或者,我们也可以新建一个主密钥,然后从之前的备份中恢复证书。如果主密钥是从备份中恢复的,我们需要在恢复证书前首先打开主密钥*/

restore master key from file = 'C:\MasterKey' decryption by password = 'Password123' encryption by password = 'Password123'

go

OPEN MASTER KEY DECRYPTION BY PASSWORD = 'Password123'

go

 

/*注意,并没有'Restore Certificate'这个命令。我们需要用'Create Certificate'命令来还原备份的证书*/

create certificate MyServerCert_Test from file = 'c:\MyServerCert.cert'

WITH PRIVATE KEY ( FILE = 'C:\ServerCert_Test.pvk' , Decryption BY PASSWORD = '997jkhUbhk$w4ez0876hKHJH5gh' );

 

--最后将成功恢复数据库

restore database TDE2 from disk='c:\TDE2.bak'