sqlServer透明数据加密(TDE)操作解析

      “透明数据加密”(TDE) 可对数据和日志文件执行实时 I/O 加密和解密。这种加密使用数据库加密密钥 (DEK),该密钥存储在数据库引导记录中以供恢复时使用。数据库文件的加密在页级执行。已加密数据库中的页在写入磁盘之前会进行加密,在读入内存时会进行解密。

使用TDE加密操作步骤:

  1. 创建主密钥
  2. 创建或获取由主密钥保护的证书
  3. 创建数据库加密密钥并通过此证书保护该密钥
  4. 将数据库设置为使用加密

       使用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库

  1. 创建主密钥
  2. 还原证书
  3. 附加数据库

--  创建数据库主密钥

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库的备份文件

       操作与附加数据库相同

  1. 创建主密钥
  2. 还原证书
  3. 附加数据库

--  创建数据库主密钥

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 加密和解密数据。

 

你可能感兴趣的:(sqlServe,数据库加密)