第4章 TDE配置步骤

透明数据加密(TDE)这东西,说简单也简单,说坑也多。我刚接触时以为就是跑几条SQL就完事,结果第一次在生产库上搞,忘了备份证书,差点惹出大麻烦。今天我们一步步走一遍TDE的配置流程,我会把每个环节容易踩的坑都指出来。

4.1 配置前的准备工作

开始之前,先把环境理清楚。你需要确认几件事:

  • 数据库版本支持TDE(SQL Server 2008+、Oracle 11g+、MySQL 8.0+都有,但各家的细节不同)
  • 你有足够的权限——至少是sysadmin或CONTROL SERVER级别,别用普通用户搞,搞到一半卡住很尴尬
  • 磁盘空间够用,加密过程会写日志,别让事务日志撑爆
  • 提前规划密钥存放位置,我习惯把证书和密钥放到单独的保存点,跟数据库文件分开放
警告:我曾经遇到过一次,因为没检查磁盘空间,加密到一半日志满,整个库变成只读。恢复起来非常麻烦。所以空间检查一定要做。

4.2 创建主密钥

主密钥(Master Key)是整个TDE体系的根。所有后续的证书和密钥都由它保护。在SQL Server里是这样做的:

-- 创建数据库主密钥
USE master;
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YourStrongPassword!@#';
GO

这里密码强度一定要够。我个人习惯用至少20位混合字符,并且把密码记在密码管理器里,别只存脑子里。万一忘了,证书恢复不了,数据就全完蛋。

4.3 创建证书

有了主密钥,下一步是创建证书。证书用来保护数据库加密密钥(DEK)。

-- 创建证书
CREATE CERTIFICATE MyTDECert
WITH SUBJECT = 'TDE Certificate for Production DB';
GO

注意一点:证书名称和主题字段最好带上业务标识,比如库名或环境名。我见过有人用Cert1这种名字,后来运维交接时根本分不清哪个是哪个。

提示:证书创建完后,立刻备份证书和私钥,存到安全位置(最好是离线或加密存储)。这是整个TDE恢复的命根子。

4.4 创建数据库加密密钥

这步是在目标数据库内创建DEK,并用之前创建的证书来加密它。

USE YourDatabase;
GO

CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE MyTDECert;
GO

算法我推荐AES_256,除非有兼容性要求否则别用DES或3DES。AES_256在性能和安全之间平衡得最好。我曾经为了省一点CPU选了AES_128,结果审计要求必须用256,后来又重新配置了一遍,折腾。

4.5 启用加密

DEK创建好了,但还没生效。需要显式打开数据库的加密开关:

ALTER DATABASE YourDatabase
SET ENCRYPTION ON;
GO

这条命令一执行,数据库就开始后台加密了。注意:它不是瞬间完成的,而是逐步扫描数据页进行加密。可以在sys.dm_database_encryption_keys里看进度。

列名 含义 常见值
encryption_state 加密状态 1=未加密, 2=加密中, 3=已加密
percent_complete 完成百分比 0~100
encryptor_thumbprint 证书指纹 0x...

加密过程中,对业务读写有轻微影响。我建议在低峰期执行,并且监控IO和CPU。如果看到percent_complete长时间不动,可能是遇到了阻塞。

4.6 验证加密效果

加密完成不代表万事大吉。我会做这几步验证:

  1. 查sys.dm_database_encryption_keys确认encryption_state = 3
  2. 备份数据库,然后尝试在另一台服务器上还原——如果还原失败或提示找不到证书,说明证书备份不完整
  3. 用SELECT * FROM sys.certificates确认证书还在
  4. 模拟一次证书丢失后的恢复流程,确保备份可用
经验之谈:别在生产库上第一次做验证。先在测试环境完整跑一遍流程,包括灾难恢复。我当初就是太自信,直接上了生产,结果还原时发现备份的证书密码记错了……脸都绿了。

4.7 避坑指南:TDE配置常见故障

我把这些年见过的几个典型故障总结一下,你碰到了可以直接对号入座。

  • 故障1:“证书不存在”错误——原因是没有在master库中创建证书,或者证书被误删。解决方法:定期备份证书,并且用BACKUP CERTIFICATE语句把证书和私钥导出到文件。
  • 故障2:加密进度卡在99%不动——通常是数据库有长时间运行的事务,导致无法获取锁。我曾经查了半小时才发现有一个后台报表在跑。杀掉阻塞进程后立刻完成。
  • 故障3:还原加密库时报“无法解密”——几乎都是证书丢失或密码不对。如果证书文件还在,可以用CREATE CERTIFICATE FROM FILE重新导入。
  • 故障4:启用加密后IO飙升——加密过程会大量读写数据页,建议用ALTER DATABASE ... SET ENCRYPTION ON WITH ROLLBACK IMMEDIATE配合设置超时,避免长时间阻塞。

4.8 本章知识结构图

下面这张图把TDE配置的完整流程串了起来,每一步的关键操作和常见陷阱都标出来了,你可以存下来当速查。

TDE配置步骤流程图 ① 环境准备 ② 创建主密钥 ③ 创建证书 ④ 创建DEK ⑤ 启用加密 ⑥ 验证 + 备份 ⚠ 每一步完成后都要及时备份密钥和证书,否则一步失误全盘皆输。
小技巧:把这张图打印出来贴工位上,每次配置TDE时对着走一遍,能避免跳步漏步。我自己就贴了一张在显示器旁边,用了三年都没出过配置事故。

最后再啰嗦一句:TDE不是设完就一劳永逸的。定期做证书恢复演练,至少每半年一次。万一哪天真要用到,你才不会手忙脚乱。好了,这一章的内容就到这里,下次我们聊聊加密对性能的影响和监控方法。