跳转到主内容
极星编程网:以代码为星,赴技术山海!

mysql如何防止弱口令带来的安全隐患_启用并配置validate_password插件

必须先确认validate_password插件已ACTIVE状态,再显式设置length、mixed_case_count等参数;仅设policy不生效,且配置需重启服务或用SET PERSIST持久化,否则仍为默认值。
validate_password
插件不是“开了就自动拦住所有弱密码”的开关,它必须显式加载、正确配置,并且只对新建或修改密码的操作生效。没加载插件、策略设成
LOW
、或只改配置不重启服务,都会让策略形同虚设。 怎么确认 validate_pass word 插件是否真在运行 很多问题其实卡在第一步:插件压根没起来。 登录 MySQL 后执行:
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'validate_password';
如果没结果,或
PLUGIN_STATUS
是
DISABLED
,说明插件未启用。 MySQL 5.7:必须手动执行
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
—— 注意不能漏掉
SONAME
和后缀
.so
,否则报错
ERROR 1123 (HY000): Can't initialize function 'validate_password'
MySQL 8.0+:插件已内置,但默认不激活,仍需执行
INSTALL PLUGIN
;从 8.0.16 起也可用
INSTALL COMPONENT 'file://component_validate_password';
(更推荐,稳定性更好) Linux 下检查文件是否存在:
/usr/lib64/mysql/plugin/validate_password.so
或
/usr/lib/mysql/plugin/validate_password.so
;Windows 对应
.dll
为什么设了 policy=1 还能设出弱密码 因为
validate_password.policy
不是布尔开关,而是策略等级,且它的实际校验逻辑和你直觉可能不同。 AI Word 一款强大的 AI 智能内容创作平台,致力于帮助用户高效生成高质量、原创且符合 SEO 规范的各类文章。 下载
policy = 0
(
LOW
):只校验
validate_password.length
(默认 8),其他参数全被忽略
policy = 1
(
MEDIUM
,MySQL 5.7+ 默认值):才真正启用多类字符要求——必须同时满足:
mixed_case_count ≥ 1
(即至少 1 个大写 + 1 个小写)、
number_count ≥ 1
、
special_char_count ≥ 1
;且
length
必须 ≥ 8
policy = 2
(
STRONG
):额外启用字典检查(需指定
validate_password.dictionary_file
),但该操作会显著拖慢密码设置速度,生产环境慎用 关键点: 已有用户的密码不会被回扫 。把 policy 从 0 改成 1,
root
密码不会立刻失效,但下次执行
ALTER USER ... IDENTIFIED BY
就会触发校验并报错 配置写进 my.cnf 但不生效的常见原因 写配置 ≠ 策略生效,中间漏掉一步就白干。 必须加在
[mysqld]
段下,不能放在
[client]
或全局其他位置 推荐用
plugin-load-add = validate_password.so
,而不是
plugin-load
,避免覆盖其他已加载插件 变量名要写全:
validate_password_policy
、
validate_password_length
等,不能简写成
password_policy
改完配置必须重启mysqld 服务 (
systemctl restart mysql
或
service mysqld restart
),仅 reload 配置不加载插件 重启后仍需验证:执行
SHOW VARIABLES LIKE 'validate_password%';
,确认所有值是你设的,且
validate_password_policy
显示为
1
或
2
,不是
0
怎么快速验证策略是否起作用 别等上线出问题,用一条语句当场测。 用内置函数打分:
SELECT VALIDATE_PASSWORD_STRENGTH('MyPass123!');
返回 0–100 的整数,≥ 50 才算中等强度,≥ 80 才算强(注意:该函数不依赖插件是否启用,但结果受当前
validate_password.*
变量影响) 直接试设密码:
CREATE USER 'test'@'localhost' IDENTIFIED BY '123';
应该报错
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
注意客户端兼容性:某些老版本客户端(如 MySQL 5.7 客户端连 8.0 服务端)可能因协议差异导致密码设置失败,此时先确认是策略问题还是连接层问题 插件加载和策略生效之间存在明确的因果链:加载失败 → 全部无效;policy 设错 → 校验逻辑降级;配置未重启 → 参数不加载;已有密码不受影响 → 安全加固只从下次改密开始。最容易被跳过的,其实是重启服务这一步。

相关文章