账号安全基线是什么
一条可定期执行的巡检清单,覆盖匿名账号、空密码、全通配来源、凭据过期、过度授权、锁定与遗留测试账号。目标是输出一份可复核的整改单:谁、什么权限、为什么是问题、怎么改,而不是笼统地说「权限有点乱」。
基本信息
| 检查对象 | mysql.user 与权限相关视图 |
|---|---|
| 必查项 | 匿名账号、空密码、来源为百分号通配、账号锁定状态 |
| 权限视图 | information_schema.user_privileges 与 schema_privileges |
| 执行频率 | 每月一次例行,权限变更后立即执行 |
| 产出物 | 问题清单加责任人与整改时限 |
巡检项与整改方向
- 匿名账号:user 为空但能连接的账号,确认无业务依赖后删除
- 空密码账号:关注本地专用账号与测试残留,逐个确认后处理
- 来源为百分号:确认是否真的是外部应用需要,否则收敛到具体网段
- 过度授权:普通业务账号出现全局权限或授权权限,按最小权限重授权
- 长期锁定或过期账号:确认是否为离职人员或废弃应用,清理并留档
- 遗留测试账号:命名含测试、临时字样的账号,确认后下线
基线检查 SQL
基线检查 SQL
-- 匿名账号与空密码
SELECT user, host, authentication_string FROM mysql.user WHERE user = '' OR authentication_string = '';
-- 来源为全通配的账号
SELECT user, host FROM mysql.user WHERE host = '%';
-- 锁定与过期状态
SELECT user, host, account_locked, password_expired FROM mysql.user;
-- 非管理员的全局权限
SELECT grantee, privilege_type FROM information_schema.user_privileges
WHERE grantee NOT LIKE "'root'%";
-- 拥有授权权限的账号(可自行提权,重点复核)
SELECT grantee, privilege_type FROM information_schema.user_privileges
WHERE privilege_type IN ('GRANT OPTION','SUPER','SYSTEM_VARIABLES_ADMIN','CONNECTION_ADMIN');风险项与处置
| 风险项 | 判定 | 处置 |
|---|---|---|
| 空密码账号 | authentication_string 为空且非本地专用 | 立即设密码或删除 |
| 全通配来源 | host 为百分号 | 收敛到业务网段或加访问控制 |
| 全局权限 | 业务账号持有全局管理权限 | 回收后按库按表重授权 |
| 授权权限 | 账号持有 GRANT OPTION | 回收,改由管理员统一授权 |
| 长期未用账号 | 无活跃连接且无归属 | 确认后禁用再删除 |
把巡检固化成脚本定期跑,比一年一次的大检查更能暴露缓慢积累的权限漂移。
回收权限前先确认归属与依赖:生产事故中相当一部分来自「以为没人用」的账号被删掉后业务报错。