MySQL 8 密码验证组件 validate_password 的详细指南
一、组件核心认知与环境准备
1. 组件本质与版本差异
validate_password 在 MySQL 8 中由「插件」升级为「内置组件」,解决了旧版插件依赖系统库的问题。核心优势:
- 无需编译依赖,直接通过 SQL 安装
- 支持动态配置,无需重启服务
- 提供强度量化函数 VALIDATE_PASSWORD_STRENGTH()
2. 环境检查与初始化
-- 1. 查看 MySQL 版本(需 8.0+)
SELECT VERSION();
-- 2. 检查组件状态(未安装时无结果)
SELECT * FROM mysql.component WHERE component_urn LIKE '%validate_password%';
-- 3. 安装组件(首次使用必执行)
INSTALL COMPONENT 'file://component_validate_password';
-- 4. 验证安装(返回 7 个系统变量)
SHOW VARIABLES LIKE 'validate_password.%';
二、场景化策略配置实战
案例 1:开发环境 - 宽松策略配置
需求:允许短密码,仅做基础长度校验
-- 1. 降低策略级别为 LOW(仅校验长度)
SET GLOBAL validate_password.policy = LOW;
-- 2. 缩短最小长度至 6 位
SET GLOBAL validate_password.length = 6;
-- 3. 禁用字符类型要求(需先设 policy 为 LOW)
SET GLOBAL validate_password.mixed_case_count = 0;
SET GLOBAL validate_password.number_count = 0;
SET GLOBAL validate_password.special_char_count = 0;
-- 4. 验证配置(允许纯字母短密码)
CREATE USER 'dev_user'@'localhost' IDENTIFIED BY 'dev123';
-- 执行成功,无报错
案例 2:生产环境 - 强策略配置(符合等保 2.0)
需求:12 位密码,含 4 类字符,禁止弱密码字典
-- 1. 配置核心策略
SET GLOBAL validate_password.policy = STRONG;
SET GLOBAL validate_password.length = 12;
SET GLOBAL validate_password.mixed_case_count = 2; -- 至少2大写+2小写
SET GLOBAL validate_password.number_count = 2; -- 至少2个数字
SET GLOBAL validate_password.special_char_count = 2; -- 至少2个特殊字符
-- 2. 配置弱密码字典
-- 2.1 创建字典文件(每行一个弱密码)
echo -e "Password123!\nAdmin@123\n1234567890" > /var/lib/mysql/weak_pass.dic
chown mysql:mysql /var/lib/mysql/weak_pass.dic -- 赋予权限
-- 2.2 关联字典到组件
SET GLOBAL validate_password.dictionary_file = '/var/lib/mysql/weak_pass.dic';
-- 3. 验证强密码有效性
CREATE USER 'prod_user'@'%' IDENTIFIED BY 'P@ssw0rd2025!!';
-- 执行成功(符合12位+4类字符+不在字典中)
CREATE USER 'prod_user'@'%' IDENTIFIED BY 'Password123!';
-- 报错 1819(字典中存在弱密码)
案例 3:测试环境 - 动态调整策略
需求:临时放宽策略用于测试,后续恢复严格模式
-- 1. 保存当前配置(避免丢失)
CREATE TABLE temp_pwd_config AS
SELECT variable_name, variable_value
FROM performance_schema.global_variables
WHERE variable_name LIKE 'validate_password.%';
-- 2. 临时放宽策略
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 4;
-- 3. 测试完成后恢复配置
SET @sql = (
SELECT CONCAT('SET GLOBAL ', variable_name, ' = ',
IF(variable_value REGEXP '^[0-9]+$', variable_value, CONCAT('''', variable_value, '''')))
FROM temp_pwd_config
ORDER BY variable_name
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DROP TABLE temp_pwd_config;
三、密码强度评估实战
案例 1:业务系统密码校验集成
场景:用户注册时通过函数实时评估密码强度
-- 定义密码强度分级函数
DELIMITER //
CREATE FUNCTION get_pwd_strength(pwd VARCHAR(255))
RETURNS VARCHAR(20)
DETERMINISTIC
BEGIN
DECLARE score INT;
SELECT VALIDATE_PASSWORD_STRENGTH(pwd) INTO score;
IF score < 25 THEN RETURN '极弱(拒绝)';
ELSEIF score < 50 THEN RETURN '弱(需加强)';
ELSEIF score < 75 THEN RETURN '中等(建议优化)';
ELSE RETURN '强(通过)';
END IF;
END //
DELIMITER ;
-- 实战调用(模拟用户注册校验)
SELECT get_pwd_strength('123456') AS 纯数字; -- 极弱(拒绝)
SELECT get_pwd_strength('Abc123') AS 三类字符; -- 中等(建议优化)
SELECT get_pwd_strength('A@3kLp7$zQ2x') AS 四类字符; -- 强(通过)
案例 2:批量检测现有用户密码强度
场景:排查数据库中不符合新策略的弱密码用户
-- 检测所有用户密码强度(需结合认证插件)
SELECT
u.user,
u.host,
CASE
WHEN u.plugin = 'mysql_native_password' THEN
VALIDATE_PASSWORD_STRENGTH(SUBSTRING_INDEX(SUBSTRING_INDEX(u.authentication_string, '*', -1), '$', 1))
ELSE '非内置认证'
END AS pwd_strength
FROM mysql.user u
WHERE u.authentication_string != '';
-- 筛选弱密码用户并强制过期
ALTER USER (
SELECT CONCAT('\'', user, '\'@\'', host, '\'')
FROM mysql.user
WHERE VALIDATE_PASSWORD_STRENGTH(authentication_string) < 50
) PASSWORD EXPIRE;
四、字典校验进阶实战
案例 1:字典文件动态更新
需求:新增弱密码到字典,无需重启服务
-- 1. 追加新弱密码到字典文件
echo "Test@1234\nQwerty123" >> /var/lib/mysql/weak_pass.dic
-- 2. 触发字典重新加载(修改路径触发解析)
SET GLOBAL validate_password.dictionary_file = '/var/lib/mysql/weak_pass.dic';
-- 3. 验证更新结果(查看字典单词数)
SHOW STATUS LIKE 'validate_password.dictionary_file_words_count';
-- 输出值增加 2,说明加载成功
-- 4. 测试新弱密码
ALTER USER 'test_user'@'localhost' IDENTIFIED BY 'Test@1234';
-- 报错 1819(新弱密码被拦截)
案例 2:字典不生效问题排查
故障现象:配置字典后仍可使用弱密码
-- 排查步骤1:检查字典路径与权限
SHOW VARIABLES LIKE 'validate_password.dictionary_file';
-- 确认路径正确后执行:
SELECT LOAD_FILE('/var/lib/mysql/weak_pass.dic') IS NOT NULL AS 可读状态;
-- 若返回 0,执行 chown mysql:mysql /var/lib/mysql/weak_pass.dic
-- 排查步骤2:检查策略级别
SHOW VARIABLES LIKE 'validate_password.policy';
-- 需设置为 2(STRONG)才启用字典校验
-- 排查步骤3:查看字典解析状态
SHOW STATUS LIKE 'validate_password.dictionary_file_last_parsed';
-- 若显示 NULL,重新设置字典路径触发解析
五、与其他安全功能联动实战
案例 1:密码过期 + 强度校验联动
需求:90 天密码过期,更新时必须符合强策略
-- 1. 配置密码过期策略
SET GLOBAL default_password_lifetime = 90;
-- 2. 配置强密码策略(同生产环境案例)
SET GLOBAL validate_password.policy = STRONG;
-- ...(其他参数配置省略)
-- 3. 验证联动效果
ALTER USER 'expire_user'@'localhost' PASSWORD EXPIRE;
-- 用户登录时提示:"Your password has expired. Please set a new password"
-- 4. 强制使用强密码更新
SET PASSWORD FOR 'expire_user'@'localhost' = 'Weak123!';
-- 报错 1819(不符合强策略,无法更新)
案例 2:禁止密码与用户名关联
需求:密码不能包含用户名或反向包含
-- 1. 启用用户名校验(默认开启)
SHOW VARIABLES LIKE 'validate_password.check_user_name';
-- 确保值为 ON
-- 2. 验证效果
CREATE USER 'alice'@'localhost' IDENTIFIED BY 'Alice@123';
-- 报错 1819(密码包含用户名)
CREATE USER 'bob'@'localhost' IDENTIFIED BY 'boB@456';
-- 报错 1819(不区分大小写匹配)
CREATE USER 'charlie'@'localhost' IDENTIFIED BY 'eilrahC@789';
-- 报错 1819(反向包含用户名)
六、常见故障与解决方案
故障 1:安装组件时报 "已存在"
-- 原因:旧版插件未卸载
SELECT * FROM information_schema.plugins WHERE plugin_name = 'validate_password';
-- 解决方案:先卸载插件再装组件
UNINSTALL PLUGIN validate_password;
INSTALL COMPONENT 'file://component_validate_password';
故障 2:配置文件报错 "unknown variable 'validate_password=off'"
-- 原因:MySQL 8 不支持旧版配置项
-- 解决方案:
-- 1. 编辑 my.cnf 注释无效配置
# validate_password=off
-- 2. 重启后通过 SQL 关闭校验
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 1;
故障 3:变量修改后不生效
-- 原因:GLOBAL 变量仅对新会话生效
-- 解决方案:
-- 1. 新会话自动生效,无需操作
-- 2. 当前会话临时生效:
SET SESSION validate_password.policy = STRONG;
七、配置持久化实战
需求:确保重启 MySQL 后策略不丢失
-- 1. 编辑配置文件(my.cnf)
[mysqld]
validate_password.policy=STRONG
validate_password.length=12
validate_password.mixed_case_count=2
validate_password.number_count=2
validate_password.special_char_count=2
validate_password.dictionary_file=/var/lib/mysql/weak_pass.dic
-- 2. 验证持久化效果
systemctl restart mysqld
mysql -u root -p -e "SHOW VARIABLES LIKE 'validate_password.%'"
-- 所有配置项均与文件一致
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923704.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!相关文章
珠海网站定制开发网站备案需要那些资料
1.磁盘分区
1.分区有固定大小 2.直接写在这块盘的磁盘分区表中(DPT),和上面装什么操作系统没有任何关系
2.每一个磁盘分区都要先有一个磁盘分区类型
GPT(首选) MBR
3.磁盘专业术语叫做块设备(Block Dev…
网站地图用什么格式网站后台有显示前台没有
04-15 周一 GitHub仓库CI服务器配置过程文档 时间版本修改人描述2024年4月15日10:35:52V0.1宋全恒新建文档2024年4月17日10:33:20v1.0宋全恒完成github actions CI的配置和工作流配置文件解读文档的撰写
简介
一些基础概念
前提知识
仓库介绍
地址镜像介绍https://github.…
实用指南:语义三角论对人工智能自然语言处理中深层语义分析的影响与启示
实用指南:语义三角论对人工智能自然语言处理中深层语义分析的影响与启示2025-10-01 09:04
tlnshuju
阅读(0)
评论(0) 收藏
举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: a…
Android开发-存储框架技术总结 - 教程
pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …
国内网站模板郑州纯手工seo
JAVA开发的一套(智造制造领航者云MES系统成品源码)saas云MES制造执行系统源码,全套源码,支持二次开发 1990年11月,美国先进制造研究中心AMR(Advanced Manufacturing Research)就提出了MES&#…
TensorFlow 详细安装指南与常见问题解决方案 - 详解
pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …
MySQL 8 密码验证组件(validate_password)
MySQL 8 密码验证组件(validate_password)在数据库安全体系中,“弱密码” 是最易被突破的防线之一。MySQL 8 引入的 validate_password 组件,通过标准化的密码强度检测与策略管控,从源头杜绝弱密码风险 —— 它替…
搜索引擎网站分析深圳龙霸网站建设物三
bash知识点:文件测试(测试文件是否存在,文件是某种类型)单目测试-e file:测试文件是是否存在-a file:测试文件是是否存在-f file:测试是否为普通文件,是为真,否则为假-d file:测试是…
平东网站建设php网站备份
前言
创建型为了创建东西才是有用的,创建型设计模式使用的场景: 1、创建一个东西; 2、可重复利用; 3、灵活性高,代码可因地制宜。
Factory Method(工厂模式)
工厂模式将目的将创建对象的具体过程屏蔽隔离起来&#…
react用于网站开发仿煎蛋wordpress
添加swap交换分区SWAP即交换分区是一种类似于Windows系统虚拟内存的功能,将一部分硬盘空间虚拟成内存来使用,从而解决内存容量不足的情况,因为SWAP毕竟是用硬盘资源虚拟的,所以速度上比真实物理内存要慢很多,一般只有当…
完整教程:C++设计模式之结构型模式:适配器模式(Adapter)
完整教程:C++设计模式之结构型模式:适配器模式(Adapter)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…
第三方应用测试:【移动应用后端API自动化测试:Postman与Newman的集成】 - 指南
第三方应用测试:【移动应用后端API自动化测试:Postman与Newman的集成】 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-f…
(附源码)基于Spring Boot的宿舍管理系统设计与建立0007
pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …
深入解析:【项目】Vision Master OpenCV 3.0 版本(预)发行说明
深入解析:【项目】Vision Master OpenCV 3.0 版本(预)发行说明pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Co…
Adobe Acrobat Pro DC 2025版破解版下载及安装使用教程
Adobe Acrobat Pro DC 2025版破解版下载及安装使用教程Adobe Acrobat Pro DC 2025是一款功能强大的PDF文档编辑和管理工具。这款软件内置了多种编辑和修复工具,能够帮助用户方便地创建、编辑、转换和共享PDF文档。不仅…
网页访问速度很慢,远程仓库调用很慢
访问测试一下IPv6 测试
ipv6失败就去 搜索——>控制面板——>网络与internet——>网络和共享中心——>修改设配器设置——>右击那个WLAN——>属性——>把下面那个ipv6协议关了——>确认然后没…
免费网站推广工具浙江平安建设信息系统网站
前言 在持续集成/持续部署(CI/CD)的旅途中,Jenkins与版本控制系统的紧密集成是不可或缺的一环。本篇“持续集成03--Jenkins结合Gitee创建项目”将引导如何将Jenkins与Gitee(一个流行的Git代码托管平台)相结合ÿ…
详细介绍:Day51 时钟系统与定时器(EPIT/GPT)
pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …
郑州惠济区建设局网站删除wordpress logo
一、虚拟机简介
1、Java 虚拟机
(1) 虚拟机:
虚拟机(Virtual Machine)是一种软件或硬件实体,它模拟了一个独立的计算环境,可以在其上运行应用程序。
虚拟机可分为系统虚拟机和程序虚拟机:
● 系统虚拟…
网站推广效果的评价指标有网页游戏哪个平台最好
还在担心网购服装对实际穿着效果没把握吗?随着京东App 6.6.3版本的更新,京东试试3D虚拟试衣功能正式上线,消费者可按照自己的身材比例创建专属的3D模型,而试穿效果则可以完全依照模型来展现。据了解,这个系统未来还将实…