MySQL从5.7.17起支持账户锁定功能,通过启用locking_password_plugin插件并配置FAILED_LOGIN_ATTEMPTS和PASSWORD_LOCK_TIME参数,可限制连续错误登录次数及锁定时长,有效防范暴力破解;需在配置文件加载插件后重启服务,创建或修改用户时设置失败尝试次数与锁定时间,锁定后可通过ALTER USER ACCOUNT UNLOCK手动解锁,建议使用MySQL 8.0+以获得更好支持。

MySQL账户锁定功能可以通过配置插件和设置密码策略来实现,主要用于防止暴力破解和多次错误登录尝试。从MySQL 5.7.17版本开始,系统支持通过password_locking机制自动锁定账户。以下是具体配置方法。
启用账户锁定插件
MySQL使用locking_password_plugin(旧版本为password_policy相关插件)来管理账户锁定。需要确保该插件已加载:
- 查看插件是否启用:
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM information_schema.PLUGINS WHERE PLUGIN_NAME LIKE '%locking%'; - 若未启用,在配置文件中添加(通常为 my.cnf 或 my.ini):
plugin-load-add=locking_pwdfreq.so(Linux)
plugin-load-add=locking_pwdfreq.dll(Windows) - 重启MySQL服务使插件生效。
设置账户失败登录次数和锁定时间
通过修改用户属性来配置连续失败登录次数及锁定时长:
- 创建用户时设置示例:
CREATE USER 'testuser'@'localhost'
IDENTIFIED BY 'password'
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LOCK_TIME 1; - 修改已有用户:
ALTER USER 'testuser'@'localhost'
FAILED_LOGIN_ATTEMPTS 5
PASSWORD_LOCK_TIME 2;
FAILED_LOGIN_ATTEMPTS:允许连续失败的登录次数(1-999)。
PASSWORD_LOCK_TIME:账户被锁定的天数(可为小数,如0.5表示12小时)。
验证账户锁定状态
当账户被锁定后,可通过以下方式检查:
- 查询用户状态:
SELECT user, host, account_locked, failed_login_attempts FROM mysql.user WHERE user = 'testuser'; - 查看错误日志,确认是否有“Too many failed login attempts”提示。
手动解锁账户
如果用户被锁定,可通过管理员账户执行:
- ALTER USER 'testuser'@'localhost' ACCOUNT UNLOCK;
- 也可在配置中临时禁用锁定策略进行调试。
基本上就这些。只要启用对应插件并合理设置失败尝试次数与锁定时间,就能有效防止恶意登录。注意版本兼容性,推荐使用MySQL 8.0+以获得更完善的密码管理支持。










