Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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'