SQL Server 数据库 TDE加密
1.1 案例环境介绍
完成本节数据 TDE加密的演示,需要准备两台虚拟机环境,一台模拟生产数据库,一台 模拟迁移还原的数据库环境。
1.1.1案例环境配置
完成本章案例数据备份部分的学习,需要准备 3 个节点的环境。具体环境配置要求,见 表 6-3
6-3 本案例环境配置
序号
server 2012 r2 密钥IP 地址
操作系统
安装软件
备注
1
生产数据库
192.168.0.131
Windows Server2016
Datacenter
SQL 2012 企业版 SP1
2
还原数据库
192.168.0.133
Windows Server2012R2
SQL 2012 企业版 SP1
1.1.2
案例拓扑图
如图 6.101 所示,这是完成本案例的实验环境拓扑图。
6.101 SQL Server 数据库 TDE 加密环境拓扑图
1.2 数据库加密实施
本章在实验环境首先对数据库进行    TDE加密,再展示合法用户在拥有密钥和证书得前提
下,完成数据库的异机还原和附加的操作。
1.2.1执行 TDE加密
1.创建 MASTER KEY 主密钥) 和 CERTIFICATE(证书)
在“ Microsoft SQL Server Managerment Studio    ”中,点击“新建查询” ,在查询分析
器中执行如下命令,创建 MASTER KEY 主密钥) 和 CERTIFICATE(证书)。
USEmaster GO
-- 创建master 数据库下的主密钥 ,在生产环境中 PASSWORD设置的足够复杂。 CREATEMASTERKEY ENCRYPTIONBY PASSWOR=D N'kgc@123';
-- 创建证书用来保护数据库加密密钥 (DEK) CREATECERTIFICATEmaster_server_certficate WITH SUBJECT= N'Master Protect DEK Certificate'    ;
创建主密钥和证书后,执行以下命令,检测密钥状态。
-- 查看 master 数据库主密钥状态
SELECTname, is_master_key_encrypted_by_server FROM sys . databases ;
执行结果,如图 6.102 所示。 is_master_key_encrypted_by_server 值为 1,代表已创 建主密钥。
执行以下命令,查看主密钥的详细信息。 -- 查看 master 数据库下的密钥信息 SELECT* FROMsys . symmetric keys ;
执行结果如图 6.61 所示。
2.创建数据库和数据库加密密钥 首先创建测试数据库 KGCDB, 创建由证书保护的数据库加密密钥(对称密钥) -- 创建测试数据库 KGCDB CREATEDATABASEKGCD;B
USEKGCD;B GO
-- 创建由 master_server_cert 保护的 DEK 数据库加密密钥 (对称密钥) CREATEDATABASEENCRYPTIONKEY
WITH ALGORITHM= AES_128 ENCRYPTIONBY SERVERCERTIFICATEmaster server certficate ;
6.62 创建数据库和加密密钥
执行结果有一行警告信息。
警告 : 用于对数据库加密密钥进行加密的证书尚未备份。 应当立即备份该证书以及与该 证书关联的私钥。如果该证书不可用, 或者您必须在另一台服务器上还原或附加数据库, 则 必须对该证书和私钥均进行备份,否则将无法打开该数据库。
提示应该立即备份证书和私钥。
3.备份主密钥、证书和私钥 首先创建密钥保存目录, 然后在查询分析器中执行如下命令, 备份证书、 私钥和 master 数据库的主密钥。
USEmaster ;
GO
-- 打开数据库连接 MASTER KEY OPENMASTERKEY DECRYPTIONBY PASSWOR=D 'kgc@123' ;
-
- 备份master 系统数据库的 CERTIFICATE BACKUPCERTIFICATEmaster_server_certficate TO FILE = 'D:\SQL2012_TDE_Keys\master_' WITH PRIVATE KEY (
FILE = 'D:\SQL2012_TDE_Keys\master_server_certficate.pvk' , ENCRYPTIONBY PASSWOR=D 'kgc@123' );
-- 关闭数据库连接 MASTER KEY CLOSEMASTERKEY
GO
USEmaster ;
GO
-- 打开数据库连接 MASTER KEY OPENMASTERKEY DECRYPTIONBY PASSWOR=D 'kgc@123' ;
-
- 备份一下数据库主密钥 (MASTER KEY) BACKUPMASTERKEY TO FILE = 'D:\SQL2012_TDE_' ENCRYPTIONBY PASSWOR=D 'kgc@123' ;
-- 关闭数据库连接 MASTER KEY CLOSEMASTERKEY
GO

6.63 备份证书、私钥和主密钥文件
4.执行 TDE加密
在查询分析器中, 执行如下命令对 KGCDB数据库开启 TDE加密。关于关闭 TDE加密, 详 见 6.64 章节。
USEKGCDB GO
-- 生产环境下,设置成单用户模式在运行加密 ALTERDATABASEKGCDBSET SINGLE_USERWITH ROLLBACKIMMEDIAT;E GO
-- 开启TDE 加密
ALTERDATABASEKGCDBSET ENCRYPTIONON; GO
-- 设置多用户模式访问
ALTERDATABASEKGCDBSET MULTI_USERWITH ROLLBACKIMMEDIATE; GO
-- 再次开启 TDE 加密 ALTERDATABASEKGCDBSET ENCRYPTIONON;
GO
完成 TDE加密后,执行如下命令,来查看加密结果。
-- 查看KGCDB 据库加密结果
SELECTDB_NAM(Edatabase_id ), encryption_state FROMsys . dm_database_encryption_keys 执行后结果如图 6.64 所示。
6.64 KGCDB 数据库加密状态 执行查询后显示, encryption_state 值为 3,代表已执行 TDE加密。 encryption state 值得含义,如下:
5.备份数据库 为完成后面得测试, 先备份数据库。 在服务器上创建一个备份文件存放目录, 本案例是 D:\SQL2012_Backup 。然后执行如下命令。
USEmaster ;
GO
-- 打开数据库连接 MASTER KEY OPENMASTERKEY DECRYPTIONBY PASSWO=RND'kgc@123';
BACKUPDATABASEKGCDB
TO DISK='D:\SQL2012_Backup\kgcdb.bak'
-- 关闭数据库连接 MASTER KEY CLOSEMASTERKEY
备份完成后,在 D:\SQL2012_Backup 目录下,可以看到 kgcdb.bak 备份文件。
1.2.2还原数据库 首先模拟数据库备份文件被人非法获得, 直接还原测试, 提示异常。不到服务器证书。 这说明数据库的 TDE加密是有效的, 没有密钥, 即使拿到数据库备份文件也将无法还原数据,