第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这种名字,后来运维交接时根本分不清哪个是哪个。
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 验证加密效果
加密完成不代表万事大吉。我会做这几步验证:
- 查
sys.dm_database_encryption_keys确认encryption_state = 3 - 备份数据库,然后尝试在另一台服务器上还原——如果还原失败或提示找不到证书,说明证书备份不完整
- 用
SELECT * FROM sys.certificates确认证书还在 - 模拟一次证书丢失后的恢复流程,确保备份可用
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不是设完就一劳永逸的。定期做证书恢复演练,至少每半年一次。万一哪天真要用到,你才不会手忙脚乱。好了,这一章的内容就到这里,下次我们聊聊加密对性能的影响和监控方法。