标签:#MySQL 安全 #TDE #DBG #透明加密 #数据库防勒索 #等保三级 #安当
一、血的教训:一次 DROP DATABASE,差点让医保系统停摆
2025 年底,某市医保局因外包人员误装远程控制软件,导致内网感染 Akira 勒索病毒。攻击者未直接加密文件,而是:
sql
-- 1. 利用弱口令登录 phpMyAdmin
-- 2. 执行高危操作:
DROP DATABASE medical_insurance;
BACKUP DATABASE temp_db TO DISK = '/tmp/stolen.bak';
由于 MySQL 数据库 未加密、无操作审计、权限宽松,攻击者轻松删除核心库并窃取备份。尽管有异地容灾,但业务中断 6 小时,引发大量群众投诉。
🚨 核心漏洞:
MySQL 在"静态数据"和"动态访问"两个层面均无有效防护。
二、破局思路:TDE + DBG 构建"存储+权限"双重防线
我们提出 纵深防御架构 ,从 数据怎么存 和 命令能不能执行 同时设防:
| 防线 | 技术 | 防护目标 |
|---|---|---|
| 第一道:TDE(透明数据加密) | 加密 .ibd / .frm / 备份文件 |
防止数据被窃取、迁移、Restore |
| 第二道:DBG(数据库动态网关) | 拦截所有 SQL 请求并实施权限控制 | 防止 DROP、DELETE、导出等高危操作 |
✅ 核心理念:
- 即使攻击者拿到
.ibd文件 → TDE 让其变废铁;- 即使攻击者连接数据库 → DBG 按策略阻断非法操作。
三、技术实现详解(基于安当 TDE + DBG)
3.1 第一道防线:TDE透明加密 ------ 让 MySQL 数据"拿不走"
- 支持版本:MySQL 5.7 / 8.0(含国产分支如 GreatSQL、Percona);
- 加密粒度 :表空间级(
.ibd文件)自动加密; - 算法 :国密 SM4-GCM(满足密评要求);
- 密钥管理 :主密钥由 软件 TCM 模块 保护,可选绑定服务器硬件指纹。
bash
# 初始化 TDE(交付脚本自动执行)
tde-cli --init --cipher SM4-GCM --bind-hardware auto
tde-cli --enable --database medical_insurance,patient_records
🔐 效果:
medical_insurance.ibd为 SM4 密文;mysqldump或BACKUP生成的文件同样加密;- 在其他机器
CREATE TABLESPACE ... ADD DATAFILE失败。
3.2 第二道防线: DBG数据库网关 ------ 让高危操作"做不了"
- 在应用与 MySQL 之间部署 DBG 代理(轻量级 Linux 服务);
- 应用连接串指向
localhost:3307(DBG 端口); - 配置 基于角色的动态权限策略:
yaml
policies:
- name: medical_db_protection
rules:
# 医保系统只读账号:禁止写操作
- user: "web_app"
actions: ["SELECT"]
tables: ["medical_insurance.*"]
deny: ["INSERT", "UPDATE", "DELETE", "DROP"]
# 运维账号:禁止 DROP 和导出
- user: "dba"
deny:
- pattern: "DROP DATABASE"
- pattern: "SELECT.*INTO OUTFILE"
# 全局阻断:防勒索特征
- pattern: "DROP DATABASE (medical_insurance|patient_records)"
action: block
alert: true
notify: soc@health.gov.cn
💡 关键能力:
- 实时拦截
DROP、DELETE FROM table(无 WHERE)、INTO OUTFILE;- 记录所有 DDL 和敏感 DML 操作;
- 支持按 IP、用户、SQL 特征多维度控制。
四、系统架构图
plaintext
[医保业务系统]
↓(JDBC 连接 localhost:3307)
[安当 DBG 动态网关] ←→ [SQL 审计 + 权限控制 + 高危阻断]
↓(转发到 localhost:3306)
[MySQL 8.0] ←→ [安当 TDE 加密引擎]
↓
[.ibd / .frm / .bak 文件(SM4 加密,绑定硬件)]

🔒 安全闭环 :
从"数据存储"到"SQL 执行",全程受控。
五、攻防对比:上线前后效果
| 攻击行为 | 无防护 | TDE + DBG 后 |
|---|---|---|
窃取 .ibd 文件 |
✅ 成功恢复数据 | ❌ 文件为密文,无法使用 |
执行 DROP DATABASE |
✅ 成功 | ❌ 被 DBG 实时阻断 |
| 导出全表到文件 | ✅ 成功 (SELECT ... INTO OUTFILE) |
❌ 被策略禁止 |
| 通过 phpMyAdmin 删除表 | ✅ 成功 | ⚠️ 操作被记录,若无权限则阻断 |
| 勒索谈判筹码 | 有(掌握数据) | 无(无法证明持有有效数据) |
📊 上线后 6 个月,数据库相关安全事件归零,等保三级复测一次性通过。
六、为什么必须组合使用?
| 方案 | 局限性 |
|---|---|
| 仅 TDE | 无法阻止 DROP,数据虽加密但被删除仍导致业务中断 |
| 仅 DBG | 无法防止 .ibd 文件被物理窃取(如磁盘被盗) |
| TDE + DBG | ✅ 存储加密 + 动态权限 + 行为审计,三位一体 |
💡 最佳实践 :
TDE 保数据不丢(防窃取),DBG 保操作合规(防破坏)。
七、合规价值:一键满足监管要求
| 监管要求 | 条款 | TDE+DBG 如何满足 |
|---|---|---|
| 等保三级 | 8.1.4.3(存储保密性) | TDE 提供 SM4 加密证明 |
| 等保三级 | 8.1.5.2(访问控制) | DBG 实现细粒度 SQL 权限 |
| 密评 | 应用和数据层面 | 使用国密算法,密钥受控 |
| 《个人信息保护法》 | 第五十一条 | 对患者信息采取加密措施 |
✅ 自动生成《数据库安全实施报告》,支撑测评。
八、写在最后
在勒索病毒精准打击数据库的时代,
单点防护已形同虚设。
通过 ** TDE + DBG 组合拳**,
我们为 MySQL 构建了一道
即使系统沦陷也无法突破 的纵深防御体系。
真正的安全,不是不被攻击,而是攻击无效。
互动话题 :
你们的 MySQL 是否遭遇过勒索或误删?
是如何防护数据库的?
欢迎评论区交流你的"MySQL 防勒索实践"!
参考资料:
- GB/T 22239-2019《网络安全等级保护基本要求》
- GM/T 0054-2018《信息系统密码应用基本要求》
- MySQL 8.0 Security Best Practices
- CISA Alert AA24-050A: Akira Ransomware