MySQL通过connection_control插件实现登录失败防护,连续输错5次密码后将触发连接延迟,虽无直接账户锁定功能,但可结合ACCOUNT LOCK和外部工具构建完整防护体系。

MySQL 本身不直接提供登录失败锁定策略(如连续输错密码5次就锁定账户),但可以通过插件方式实现,最常用的是使用 mysql_native_password 或 caching_sha2_password 配合 failed_login_attempts 插件来实现登录失败锁定功能。从 MySQL 8.0 开始,支持通过企业级插件或社区版的类似机制来配置。
MySQL 提供了一个名为 connection_control 的插件,它可以限制登录失败后的重试行为,实现延迟登录甚至间接锁定账户的效果。虽然它不是直接“锁定账号”,但可通过增加登录延迟来防止暴力破解。
步骤如下:
执行以下 SQL 命令启用插件:
INSTALL PLUGIN connection_control SONAME 'connection_control.so';
INSTALL PLUGIN connection_control_failed_login_attempts SONAME 'connection_control.so';
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM information_schema.PLUGINS
WHERE PLUGIN_NAME LIKE '%connection%';
输出中应看到 connection_control 和 connection_control_failed_login_attempts 状态为 ACTIVE。
修改以下系统变量来定义失败尝试的行为:
示例设置:
SET GLOBAL connection_control_failed_connections_threshold = 5;
SET GLOBAL connection_control_min_connection_delay = 1000; -- 1秒
SET GLOBAL connection_control_max_connection_delay = 3600000; -- 1小时
当某个IP连续输错密码超过5次,后续连接将被强制延迟,延迟时间逐步增加,达到阻断效果。
上述 SET GLOBAL 只在运行时生效。要永久生效,需写入 MySQL 配置文件(如 my.cnf 或 my.ini):
[mysqld]
plugin-load-add=connection_control.so
connection-control-failed-login-attempts=ON
connection_control_failed_connections_threshold = 5
connection_control_min_connection_delay = 1000
connection_control_max_connection_delay = 3600000
保存后重启 MySQL 服务使配置永久生效。
如果需要完全锁定用户(如锁定30分钟),MySQL 原生不支持,但可通过以下方式实现:
例如手动锁定用户:
ALTER USER 'testuser'@'localhost' ACCOUNT LOCK;
解锁:
ALTER USER 'testuser'@'localhost' ACCOUNT UNLOCK;
基本上就这些。MySQL 通过插件能有效缓解暴力破解,虽无直接“失败N次就锁定”的功能,但配合 connection_control 插件和账户锁机制,可以构建较安全的登录防护体系。注意定期检查日志和监控异常登录行为。
以上就是如何在mysql中设置登录失败锁定策略的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号