MySQL 默认登录失败不锁定账户,暴力破解风险真实存在
MySQL 本身不内置账户锁定机制(比如连续 5 次输错密码就锁 15 分钟),mysql.user 表里也没有 account_locked 或 failed_login_attempts 这类字段。这意味着只要网络可达、端口开放(默认 3306),攻击者就能无限次重试 root 或其他弱口令账户——这是生产环境最常被忽略的基础风险。
启用 validate_password 插件 + 强制密码策略
这不是防爆破的直接手段,但能大幅提高口令熵值,让字典攻击失效。注意:插件必须在服务启动时加载,且对已存在的弱密码不会自动拒绝,需手动重置。
- 检查是否已启用:
SHOW VARIABLES LIKE 'validate_password%'; - 若未启用,在
my.cnf的[mysqld]段添加:plugin_load_add = validate_password.so,然后重启 mysqld - 关键参数建议:
validate_password.length=12、validate_password.mixed_case_count=1、validate_password.number_count=1、validate_password.special_char_count=1 - 已有账户需用
ALTER USER 'xxx'@'%' IDENTIFIED BY 'StrongPass!2024';才会触发校验
用 mysql_native_password + faillock(Linux PAM)做登录层防护
MySQL 自身无登录失败计数,但可以把它“交给”操作系统管。前提是 MySQL 使用 mysql_native_password 认证方式(而非 caching_sha2_password),并配置 PAM 认证插件,再由 Linux 的 faillock 实现账户锁定。