“透明数据加密”(TDE) 可对数据和日志文件执行实时 I/O 加密和解密。这种加密使用数据库加密密钥 (DEK),该密钥存储在数据库引导记录中以供恢复时使用。数据库文件的加密在页级执行。已加密数据库中的页在写入磁盘之前会进行加密,在读入内存时会进行解密。
使用TDE加密操作步骤:
使用TDE加密
USE master
--创建主密钥**********************
Create MASTER KEY ENCRYPTION
BY PASSWORD = 'B19ACE32-AB68-4589-81AE-010E9092FC6B'
GO
--创建证书,用于透明数据加密**********************
CREATE CERTIFICATE TDE_Server_Certificate
WITH SUBJECT = 'Server-level cert for TDE'
GO
USE test
GO
--第一步:现在开始TDE加密**********************
CREATE DATABASE ENCRYPTION KEY--创建数据库加密密钥
WITH ALGORITHM = TRIPLE_DES_3KEY--加密算法
ENCRYPTION BY SERVER CERTIFICATE TDE_Server_Certificate--使用服务器级证书加密
GO
--第二步:备份证书
USE master
backup certificate TDE_Server_Certificate --证书名称
to file = N'D:\TDE_Server_Certificate.cer' --证书备份文件路径
with private key (
file = N'D:\TDE_Server_Certificate_saleskey.pvk' ,
encryption by password = N'B19ACE32-AB68-4589-81AE-010E9092FC6B' ); --密钥
GO
--第二步:启用数据库加密**********************
ALTER DATABASE test
SET ENCRYPTION ON
GO
--查看数据库是否加密
SELECT is_encrypted
FROM sys.databases
WHERE name = 'test'
在另外一台服务器上附加加密后的test库
-- 创建数据库主密钥
Create MASTER KEY ENCRYPTION
BY PASSWORD = 'B19ACE32-AB68-4589-81AE-010E9092FC6B' --加密时所用的密钥
GO
-- 还原证书
create certificate TDE_Server_Certificate --证书名称
from file = N'D:\TDE_Server_Certificate.cer' --证书备份文件路径
with private key
(
file = N'D:\TDE_Server_Certificate_saleskey.pvk' ,
decryption by password = N'B19ACE32-AB68-4589-81AE-010E9092FC6B' --密钥
);
GO
-- 附加数据库(成功)
create database [test] on
( filename = N'C:\Database\test.mdf' ),
( filename = N'C:\Database\test_log.ldf' )
for attach ;
go
注意:当还没有正确的还原证书时,附加数据库将会提示失败信息
在另外一台服务器上还原test库的备份文件
操作与附加数据库相同
-- 创建数据库主密钥
Create MASTER KEY ENCRYPTION
BY PASSWORD = 'B19ACE32-AB68-4589-81AE-010E9092FC6B' --加密时所用的密钥
GO
-- 还原证书
create certificate TDE_Server_Certificate --证书名称
from file = N'D:\TDE_Server_Certificate.cer' --证书备份文件路径
with private key
(
file = N'D:\TDE_Server_Certificate_saleskey.pvk' ,
decryption by password = N'B19ACE32-AB68-4589-81AE-010E9092FC6B' --密钥
);
GO
-- 还原数据库
RESTORE DATABASE [Temp]
FROM DISK = N'C:\Software\test.bak'
WITH FILE = 1,
MOVE N'Temp' TO N'C:\Database\test.mdf',
MOVE N'Temp_log' TO N'C:\Database\test_log.ldf',
NOUNLOAD, STATS = 10
其他相关sql
1、修改及查看加密算法
USE test
GO
--修改加密算法
ALTER DATABASE ENCRYPTION KEY
REGENERATE WITH ALGORITHM = AES_128 --加密算法
Go
--查看加密算法
SELECT DB_NAME(database_id) databasenm,
CASE encryption_state
WHEN 0 THEN 'No encryption'
WHEN 1 THEN 'Unencrypted'
WHEN 2 THEN 'Encryption in progress'
WHEN 3 THEN 'Encrypted'
WHEN 4 THEN 'Key change in progress'
WHEN 5 THEN 'Decryption in progress'
END encryption_state,
key_algorithm,
key_length
FROM sys.dm_database_encryption_keys
2、修改证书
USE master
GO
--创建新证书
CREATE CERTIFICATE TDE_Server_Certificate_V2
WITH SUBJECT = 'Server-level cert for TDE V2'
GO
--用新证书修改DEK
USE test
GO
ALTER DATABASE ENCRYPTION KEY
ENCRYPTION BY SERVER CERTIFICATE TDE_Server_Certificate_V2
3、删除TDE加密
--移除数据库TDE加密
ALTER DATABASE test
SET ENCRYPTION OFF
GO
--移除TDE后,可以删除DEK
USE test
GO
Drop DATABASE ENCRYPTION KEY
Go
--删除加密证书
drop certificate TDE_Server_Certificate;
go
--删除主密钥
drop master key;
go
其他注意信息
启用 TDE 时,应该立即备份证书和与证书相关联的私钥。如果证书变为不可用,或者如果必须在另一台服务器上还原或附加数据库,则必须同时具有证书和私钥的备份,否则将无法打开该数据库。即使不再对数据库启用TDE,也应该保留加密证书。即使数据库未加密,事务日志的某些部分仍可能保持受到保护,但在执行数据库的完整备份前,对于某些操作可能需要证书。超过过期日期的证书仍可以用于通过 TDE 加密和解密数据。