mysql-5.7 密码过期详解
一、起源:
今天一上班就听到说error-log里记录了大量的
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
二、mysql 用户密码过期的处理:
1、从一条简单的create user 看mysql密码过期的内在逻辑
mysql> create user exuser@'%' identified by 'exPass@352';
Query OK, 0 rows affected (0.01 sec) mysql> show create user exuser@'%';
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| CREATE USER for exuser@% |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| CREATE USER 'exuser'@'%' IDENTIFIED WITH 'mysql_native_password' AS '*CD089516E876A47FEBF3BB6A9ADD45F02F4BF73B' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
2、从上面的show create user 可以看出 mysql会悄悄的在create user 语句的后面加上一个 password expire defautl 子句;这个
password expire default 子句就是用来设置mysql 账号的密码过期时间的(单位天)。
3、看写死mysql 账号密码的过期时间时mysql是怎么处理的
mysql> create user tt@'%' identified by '' password expire interval 30 day;
Query OK, 0 rows affected (0.00 sec) mysql> show create user tt@'%';
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| CREATE USER for tt@% |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| CREATE USER 'tt'@'%' IDENTIFIED WITH 'mysql_native_password' AS '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' REQUIRE NONE PASSWORD EXPIRE INTERVAL 30 DAY ACCOUNT UNLOCK |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
4、也就是说在create user 中写死过期时间的情况下,mysql是不会悄悄的加上password expire default 的。
5、password expire default 这里的default的值是参照default_password_lifetime这个variable的,也就是说可以通过
改变default_password_lifetime的值来灵活的控制账号的过期时间。
三、default_password_lifetime 地默认值:
目前 default_password_lifetime 这个参数的默认值是0 ,也就是说默认情况下 create user xxx@xxx identified by 'xxx' 这样
创建出来的账号密码是永不过期的。
四、回答一下起源中的问题:
“起源”中提到的密码过期是因为在mysql-5.7.4 ~ mysql-5.7.10 这些版本中default_password_lifetime的默认值是360,
这样就尴尬了,这样的设置使得默认情况下mysql运行个360天就要改一下密码,这不科学!于是呢在mysql-5.7.11 以后
的mysql就把default_password_lifetime这个参数的默认值设置成了0.
五、给你一个环境怎么才看出来用户的密码有没有过期
对于这里所提到的密码过期的判定不能简单的看user.password_expired 这个列来区分账号的密码有没有过期,而是要根据mysql账号过期的
内在逻辑来看
1、第一步:查看user.assword_last_changed 列来看对应账号密码的最近一次的修改时间
mysql> select user,host,password_expired,password_last_changed,password_lifetime from user;
+---------------+-----------+------------------+-----------------------+-------------------+
| user | host | password_expired | password_last_changed | password_lifetime |
+---------------+-----------+------------------+-----------------------+-------------------+
| root | localhost | N | 2017-10-15 10:07:32 | NULL |
| mysql.session | localhost | N | 2017-10-04 12:27:10 | NULL |
| mysql.sys | localhost | N | 2017-10-04 12:27:10 | NULL |
| jianglexing | localhost | N | 2017-10-07 09:48:14 | NULL |
| repl | % | N | 2017-10-07 19:16:44 | NULL |
| tstuser | localhost | N | 2017-10-12 10:04:17 | NULL |
+---------------+-----------+------------------+-----------------------+-------------------+
2、第二步:查看default_password_lifetime这个变量的值是多少
mysql> show global variables like 'default_password_lifetime';
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| default_password_lifetime | 1 |
+---------------------------+-------+
1 row in set (0.00 sec)
3、确定用户是不是用的mysql全局的密码过期策略
mysql> show create user tstuser@'localhost';
+-------------------------------------------------------------------------------------------------------------------------------+
| CREATE USER for tstuser@localhost |
+-------------------------------------------------------------------------------------------------------------------------------+
| CREATE USER 'tstuser'@'localhost' IDENTIFIED WITH 'mysql_native_password' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK |
+-------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
4、确定当前的时间
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2017-10-15 11:02:36 |
+---------------------+
1 row in set (0.00 sec)
5、结论:
对于tstuser来说它用的是全局的密码过期策略,也就是一天后密码就过期,然而它最近一次更新密码的时间是2017-10-12,而当前的时间已经是
2017-10-15 所以可以确定的说tstuser的密码已经过期了。
mysql-5.7 密码过期详解的更多相关文章
- MySQL的用户密码过期功能详解
MySQL的用户密码过期功能详解 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 先说明两个术语. Payment Ca ...
- 详解MySQL的用户密码过期功能
这篇文章主要为大家详细介绍了MySQL的用户密码过期功能的相关资料,需要的朋友可以参考下 Payment Card Industry,即支付卡行业,PCI行业表示借记卡.信用卡.预付卡.电子钱包. ...
- MYSQL常用内置函数详解说明
函数中可以将字段名当作变量来用,变量的值就是该列对应的所有值:在整理98在线字典数据时(http://zidian.98zw.com/),有这要一个需求,想从多音字duoyinzi字段值提取第一个拼音 ...
- Mysql数据库导入命令Source详解
Mysql数据库导入命令Source详解 几个常用用例: 1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u root -p dat ...
- MySQL数据类型以及基本使用详解
MySQL数据类型以及基本使用详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL服务器的主要组件 我们知道MySQL的主要组件主要是由服务端(mysqld)和客户端 ...
- mysql互为主从实战设置详解及自动化备份(Centos7.2)
mysql互为主从实战设置详解(Centos7.2) 第一步:mysql配置 my.cnf配置 服务器1 (10.89.10.90) [mysqld] server-id=1 log-bin=/ ...
- mysql中event的用法详解
一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...
- MySQL Cluster 配置文件(config.ini)详解
MySQL Cluster 配置文件(config.ini)详解 ################################################################### ...
- mysql中SQL执行过程详解与用于预处理语句的SQL语法
mysql中SQL执行过程详解 客户端发送一条查询给服务器: 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果.否则进入下一阶段. 服务器段进行SQL解析.预处理,在优化器生成对应的 ...
随机推荐
- CIF、QCIF
分辨率: 每个像素的存储方式都是YUV QQCIF:88*72 QCIF:176*144 CIF:352*288 2CIF:704*288 DCIF:584*384 4CIF:704*576 ...
- 【Android 百度地图实战】2.几种地图图层的显示
具体代码官网API已提供,地址在这. 效果图如下: 主要代码: // 创建选项菜单 @Override public boolean onCreateOptionsMenu(Menu menu) { ...
- 如何使用SubtitleWorkshop制作字幕
任意打开一段字幕文件 对于初学者而言还是最好打开一个带有中英字幕的视频文件(字幕是嵌入在视频文件里面的)然后一句一句照着写 先打开视频预览模式 再打开一段视频文件,并新建一个字幕文件 牢记几个快捷键 ...
- 分离链接散列表C语言实现实例
/* hash_sep.h */ #ifndef _HASH_SEP_H #define _HASH_SEP_H #define MIN_TABLE_SIZE 5 struct list_node; ...
- Linux Bash 脚本:自己定义延迟代码块(裸数据保存方案)
结合 alias 和 read 使用方法.能够保存一些将要延迟执行的脚本,或者裸数据(字符串不被扩展)到一个变量中.以备后用. $ alias BEGIN='read -d "" ...
- 开源 免费 java CMS - FreeCMS1.9 移动APP管理 网站配置
项目地址:http://www.freeteam.cn/ 网站配置 管理员能够在这里设置当前管理网站是否同意移动app訪问,是否默认移动APP网站.首页的布局,首页数据最多载入页数. 从左側管理菜单点 ...
- 【DB2】db2常用SQL语句集合
持续更新中 1.修改日志模式为不记录 alter table table_name activate not logged initially; 2.清空表 alter table t1 activ ...
- KnockoutJS + My97DatePicker
如何将Knockoutjs和其他脚本库结合使用?这里给出一个Knockoutjs与my97datepicker配合使用的例子,例子中使用了ko的自定义绑定功能: ko.bindingHandlers. ...
- SpringMVC之ModelAndView的用法(转)
原文地址:https://blog.csdn.net/qq30211478/article/details/78016155 (一)使用ModelAndView类用来存储处理完后的结果数据,以及显示该 ...
- Web在线文件管理器(web os) KODExplorer
KODExplorer是款开源的Web在线文件管理.代码编辑器.它提供了类windows经典用户界面,一整套在线文件管理.文件预览.编辑.上传下载.在线解压缩.音乐播放功能.让你直接在浏览器端实现we ...