检查并删除匿名用户;2. 审查高危权限分配;3. 清理空密码账户;4. 限制主机访问范围;5. 删除默认数据库;6. 启用操作日志审计,遵循最小权限原则可有效降低MySQL安全风险。
检测 MySQL 权限漏洞的核心在于排查用户权限配置不当、弱口令、默认账户残留和权限过度分配等问题。以下是一些实用的检查方法和建议。
1. 检查是否存在匿名用户
匿名用户(用户名为空)可能被攻击者利用,导致未授权访问。
执行以下命令查看:
SELECT User, Host FROM mysql.user WHERE User = ”;
如果返回结果非空,说明存在匿名用户,应立即删除:
DROP USER ”@’localhost’;
DROP USER ”@’%’;
2. 查看用户权限分配情况
检查是否有用户被授予过多权限,如 SUPER、FILE、GRANT ALL 等高危权限。
列出所有用户的权限:
SELECT User, Host, Select_priv, Insert_priv, Update_priv, Delete_priv,
Reload_priv, Shutdown_priv, Process_priv, File_priv,
Grant_priv, Super_priv FROM mysql.user;
重点关注:
- File_priv = Y:可读写服务器文件,易被用于导出恶意文件或读取敏感数据
- Super_priv = Y:可执行 KILL、CHANGE MASTER、SET GLOBAL 等高危操作
- Grant_priv = Y:可给其他用户授予权限,可能导致权限扩散
只保留必要权限,使用 REVOKE 回收多余权限。
3. 检查空密码或弱密码账户
空密码账户极易被入侵。
查询空密码用户:
SELECT User, Host FROM mysql.user WHERE authentication_string = ”;
为这些账户设置强密码:
ALTER USER ‘username’@’host’ IDENTIFIED BY ‘StrongPassword123!’;
4. 验证主机限制是否合理
避免使用 % 作为 Host,尤其是对高权限账户。
查看远程可登录的用户:
SELECT User, Host FROM mysql.user WHERE Host = ‘%’;
应尽量限制为具体 IP 或内网段,例如:
UPDATE mysql.user SET Host = ‘192.168.1.%’ WHERE User = ‘appuser’ AND Host = ‘%’;
FLUSH PRIVILEGES;
5. 审计默认账户和测试数据库
MySQL 安装后可能包含 test 数据库或 test 开头的数据库,且默认允许所有人访问。
检查并删除不必要的数据库:
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db LIKE ‘test%’;
6. 启用日志审计(可选但推荐)
开启通用查询日志或使用 MySQL Enterprise Audit 插件,记录用户操作行为。
临时开启通用日志(生产慎用):
SET GLOBAL general_log = ‘ON’;
SET GLOBAL general_log_file = ‘/var/log/mysql/query.log’;
通过日志分析异常登录或敏感操作。
基本上就这些。定期运行上述检查,结合最小权限原则管理账户,能有效降低 MySQL 权限漏洞风险。