核心查询
SELECT User, Host, authentication_string
FROM mysql.user
WHERE Host = '%';
结果解读
| Host 值 | 含义 | 风险等级 |
| % | 任意主机 (通配符) | 🔴 高危 |
| localhost / 127.0.0.1 / ::1 | 仅本地回环 | 🟢 安全 |
| 192.168.1.% | 特定网段 | 🟡 中危 |
| 具体 IP/主机名 | 单主机 | 🟢 安全 |
安全加固操作
-- 1. 修改为具体 IP
RENAME USER 'risk_user'@'%' TO 'risk_user'@'192.168.1.100';
-- 2. 或删除高危账号
DROP USER 'risk_user'@'%';
-- 3. 创建受限账号
CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'strong_pass';
GRANT SELECT, INSERT, UPDATE ON app_db.* TO 'app_user'@'192.168.1.%';
FLUSH PRIVILEGES;
自动化巡检脚本
#!/bin/bash
# check_wildcard_users.sh
mysql -N -e "SELECT CONCAT('\"', User, '\"@\"', Host, '\"') FROM mysql.user WHERE Host = '%';" | \
while read account; do
echo "[WARNING] 通配符主机账号: $account"
# 可集成告警: 发送邮件/钉钉/企业微信
done
最佳实践
- 定期审计
mysql.user 表
- 应用账号遵循最小权限原则
- 生产环境禁用
% 主机账号
- 使用 SSL 连接强制加密
- 启用审计插件记录登录尝试