首页/数据/数据库速查/root 账号加固与专用账号拆分

root 账号加固与专用账号拆分

root@% 或 root 直达业务系统是重大风险:root 只允许 localhost、业务使用专用最小权限账号、运维走跳板机与个人账号。

数据库速查数据更新于 2026-10-13

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 前先确认没有应用或运维脚本依赖它,改完立刻用另一个已登录会话验证新账号能连上,避免把自己锁在实例外面。

易错点

  • 应用直接用 root 连接数据库,一旦配置泄露即全库暴露
  • 存在空密码或匿名账号,任何能连通网络的人都能登录
  • 只改密码不收敛权限,账号仍可访问全部库表
  • 人员离职后账号未回收,凭据长期停留在代码库或脚本里
  • 运维直连生产且不做审计,出事无法追溯操作人

数据来源与参考

  • MySQL 8.0 Reference Manual: Access Control Best Practices

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌