禁止匿名用户是MySQL安全加固的首要措施,需通过SELECT查询识别User为空的账号,用DROP USER命令删除,并验证清除效果及连接安全性。

禁止匿名用户是 MySQL 安全加固中最基础也最关键的一步。默认安装的 MySQL 可能存在空用户名(即 '')的账号,这类匿名用户无需密码即可登录,一旦被利用,极易导致数据泄露或提权攻击。
检查是否存在匿名用户
以 root 或高权限账号登录 MySQL 后,执行以下命令查看所有用户:
SELECT User, Host FROM mysql.user;重点关注 User 列为空字符串('')的记录,例如:
| '' | localhost |
| '' | % |
这类就是匿名用户,必须清理。
删除匿名用户
确认后,逐条执行 DROP USER 删除(注意:MySQL 5.7+ 推荐用 DROP USER,不建议直接删表):
DROP USER ''@'localhost';DROP USER ''@'%';
如果提示“ERROR 1396 (HY000)”,说明该用户不存在,可跳过;若使用的是较老版本(如 5.1),可用以下方式安全清理:
- 先刷新权限:FLUSH PRIVILEGES;
- 再手动更新 user 表(仅当 DROP USER 不生效时备用):DELETE FROM mysql.user WHERE User='';
验证是否清除干净
再次运行 SELECT User, Host FROM mysql.user;,确保结果中不再出现空 User。同时建议做一次连接测试:
- 尝试用匿名方式连接:mysql -u '' -h 127.0.0.1 -P3306,应报错拒绝访问
- 用真实账号(如 root)连接仍需密码,且不能绕过认证
配套加固建议
禁掉匿名用户只是起点,还需同步落实以下措施:
- 禁用 root 远程登录:将 root@'%' 删除或限制为内网 IP,保留 root@localhost 即可
- 为所有用户设置强密码:避免空密码、弱密码(如 '123456'、'password')
- 关闭旧协议认证插件:检查 plugin 列是否为 mysql_native_password,避免使用已废弃的 old_password
- 定期审计用户列表:尤其在部署新应用、交接数据库权限后重新核查










