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'