MySQL从5.7.17起通过连接控制插件和密码策略实现账户锁定。首先安装connection_control插件,配置失败登录阈值、最小和最大延迟时间,实现登录失败后的连接延迟;再启用validate_password插件,设置密码策略级别和过期周期,提升密码安全性;还可使用ACCOUNT LOCK手动锁定用户。这些机制结合使用可有效增强账户安全,但主要依赖延迟而非永久锁定,需配合外部工具实现严格封禁。

MySQL 从 5.7.17 版本开始支持账户锁定策略,主要通过 密码管理 和 登录失败处理机制 实现。要设置账户锁定策略,需结合系统变量和用户权限配置来完成。
启用登录失败跟踪与账户锁定
MySQL 提供了连接控制插件(connection control)和密码安全策略来实现账户锁定功能。以下是关键步骤:
- 安装连接控制插件:该插件可监控登录失败次数并触发延迟或锁定。
执行以下命令安装: INSTALL PLUGIN connection_control SONAME ‘connection_control.so’;
INSTALL PLUGIN connection_control_failed_login_attempts SONAME ‘connection_control.so’; - 配置登录失败锁定参数:
在 my.cnf 或 my.ini 配置文件中添加: [mysqld]
connection-control-failed-connections-threshold = 3
connection-control-min-connection-delay = 1000
connection-control-max-connection-delay = 86400说明:
– failed-connections-threshold:允许连续失败登录次数,设为 3 表示第 4 次开始延迟连接。
– min/max-connection-delay:首次延迟 1 秒,失败越多延迟越长,最长可达 24 小时。
使用密码安全策略增强账户安全
MySQL 的密码验证插件可强制用户定期修改密码,并限制重复使用。虽然不直接“锁定”账户,但能有效提升安全性。
- 启用密码验证插件:
INSTALL PLUGIN validate_password SONAME ‘validate_password.so’; - 设置密码策略级别:
SET GLOBAL validate_password.policy = MEDIUM;
可选值:LOW / MEDIUM / STRONG,MEDIUM 会检查长度、数字、大小写、特殊字符。 - 设置密码过期策略:
让用户每 90 天必须改密码: ALTER USER ‘username’@’localhost’ PASSWORD EXPIRE INTERVAL 90 DAY;
或全局默认: SET GLOBAL default_password_lifetime = 90;
手动锁定与解锁用户账户
MySQL 支持直接锁定用户,适用于临时禁用场景。
- 创建或修改用户时设置锁定状态:
CREATE USER ‘testuser’@’%’ IDENTIFIED BY ‘password’ ACCOUNT LOCK; - 锁定已有用户:
ALTER USER ‘testuser’@’%’ ACCOUNT LOCK; - 解锁用户:
ALTER USER ‘testuser’@’%’ ACCOUNT UNLOCK;
基本上就这些。账户锁定策略依赖插件和配置组合实现。如果需要严格审计和自动封禁,建议结合外部监控脚本或防火墙工具。MySQL 内置机制更偏向延迟和提醒,而非永久锁定。确保插件加载成功后重启服务生效,可通过 SHOW PLUGINS; 查看状态。不复杂但容易忽略细节。


