MySQL防暴力破解需多层设防:①启用失败登录限制与账户锁定;②禁用远程root并限定业务账号IP;③强制SSL加密及禁用弱认证插件;④结合fail2ban与日志审计实现系统级防护。

MySQL 防暴力破解的核心是限制非法登录尝试、强化认证机制、隐藏服务暴露面,并配合系统级防护。单纯靠密码强度远远不够,必须多层设防。
限制登录失败次数与锁定账户
MySQL 8.0+ 原生支持密码失败计数和账户锁定功能,可直接启用:
- 创建用户时指定失败限制:CREATE USER 'appuser'@'%' IDENTIFIED BY 'pwd123' FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1;
- 修改已有用户:ALTER USER 'appuser'@'%' FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME UNBOUNDED;
- 查看账户锁定状态:SELECT user, host, password_locking_status FROM mysql.user;
注意:该功能依赖 validate_password 插件已加载,且需确保 mysql.user 表结构包含对应字段(MySQL 8.0.19+ 默认支持)。
禁止远程 root 登录 + 限定可信 IP 访问
root 账户绝不开放远程访问,普通业务账号也应最小化授权范围:
- 禁用远程 root:DELETE FROM mysql.user WHERE user='root' AND host!='localhost'; FLUSH PRIVILEGES;
- 为业务用户绑定具体 IP 或网段:CREATE USER 'webapp'@'192.168.10.50' IDENTIFIED BY 'strong_pwd';
- 若使用云服务器,务必在安全组/防火墙层面只放行应用服务器的内网 IP,关闭 3306 端口对公网的暴露。
启用 SSL 加密连接 + 关闭旧协议
防止密码在网络中明文传输,同时阻止低版本弱认证协议被利用:
- 配置 MySQL 启用 SSL(需提前生成证书):[mysqld] ssl-ca=/path/ca.pem ssl-cert=/path/server-cert.pem ssl-key=/path/server-key.pem
- 强制客户端使用 SSL 登录:ALTER USER 'webapp'@'192.168.10.50' REQUIRE SSL;
- 禁用不安全的旧认证插件(如 mysql_native_password 在某些场景下易被降级):SET GLOBAL default_authentication_plugin = 'caching_sha2_password';(MySQL 8.0 默认)
结合系统级防护:fail2ban + 登录日志审计
MySQL 自身日志不直接记录失败 IP,需借助系统日志和外部工具增强感知能力:
- 开启 MySQL 通用查询日志或错误日志(谨慎启用,避免性能影响):[mysqld] log_error = /var/log/mysql/error.log
- 配置 fail2ban 监控 MySQL 错误日志,匹配类似 Access denied for user 的条目,自动封禁源 IP(需编写 jail.local 规则)
- 定期检查 SELECT user, host, authentication_string FROM mysql.user; 清理无用账号,禁用空密码或测试账号










