root 加固是什么
root 账号直达业务系统、或者存在 root@'%' 这类任意主机都能连接的账号,属于数据库最容易被放大的风险点。加固方向有三条:root 只保留本机或受限网段访问;业务系统使用专用最小权限账号;运维操作走跳板机与实名账号并留痕。这样即使应用凭据泄露,攻击面也被限制在单库单表。
基本信息
| 核心原则 | root 本机化、业务账号最小权限、运维账号实名 |
|---|---|
| 账号巡检 | SELECT user, host, plugin FROM mysql.user; |
| 权限收敛 | 只授予业务实际需要的库表与操作 |
| 密码策略 | 启用 validate_password 组件并定期轮换 |
| 审计手段 | 短时开启通用日志或部署审计插件 |
典型使用场景
- 新实例交付:交付前完成账号排查与权限收敛
- 定期巡检:盘点账号清单、空密码账号与过宽 Host 限制
- 人员变动:离岗时回收账号与授权,避免残留凭据
- 云数据库对接:使用云平台账号体系并限制来源网段
- 异常排查:从连接来源定位可疑 IP 与行为
- 合规自查:整理账号权限矩阵与审计记录
加固与巡检示例
加固与巡检示例
-- 盘点账号与来源
SELECT user, host, plugin FROM mysql.user;
-- 排查匿名账号与过宽的 Host 限制
SELECT user, host FROM mysql.user WHERE user = '' OR host = '%';
-- 收紧远程 root(确认无依赖后执行)
DROP USER 'root'@'%';
-- 或限制到跳板机网段
-- CREATE USER 'root'@'10.10.0.%' IDENTIFIED BY '强口令';
-- GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.10.0.%' WITH GRANT OPTION;
-- 业务账号单独体系,只给必要权限
-- CREATE USER 'svc-order'@'10.0.%' IDENTIFIED BY '强口令';
-- GRANT SELECT, INSERT, UPDATE, DELETE ON app_order.* TO 'svc-order'@'10.0.%';
-- SHOW GRANTS FOR 'svc-order'@'10.0.%';账号类型与建议
| 账号 | 常见问题 | 建议 |
|---|---|---|
| root@localhost | 正常用途,需强口令 | 保留,限制为跳板机或本机登录 |
| root@'%' | 任意主机可连,爆破目标 | 确认无依赖后删除或收窄网段 |
| 业务账号 | 常被授予 ALL PRIVILEGES | 按库表收敛为 CRUD |
| 只读账号 | 有时被误给写权限 | 只授 SELECT,用于报表与只读副本 |
| 备份账号 | 权限过大 | 只授备份所需权限并限制来源 |
云数据库默认禁止 root 远程;自建实例至少保证 root 密码强度、禁用或限制 root@'%' 的 Host 范围。
删除远程 root 前先确认没有应用或运维脚本依赖它,改完立刻用另一个已登录会话验证新账号能连上,避免把自己锁在实例外面。