一、起源:

  今天一上班就听到说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 密码过期详解的更多相关文章

  1. MySQL的用户密码过期功能详解

    MySQL的用户密码过期功能详解 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 先说明两个术语. Payment Ca ...

  2. 详解MySQL的用户密码过期功能

    这篇文章主要为大家详细介绍了MySQL的用户密码过期功能的相关资料,需要的朋友可以参考下   Payment Card Industry,即支付卡行业,PCI行业表示借记卡.信用卡.预付卡.电子钱包. ...

  3. MYSQL常用内置函数详解说明

    函数中可以将字段名当作变量来用,变量的值就是该列对应的所有值:在整理98在线字典数据时(http://zidian.98zw.com/),有这要一个需求,想从多音字duoyinzi字段值提取第一个拼音 ...

  4. Mysql数据库导入命令Source详解

    Mysql数据库导入命令Source详解 几个常用用例: 1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u root -p dat ...

  5. MySQL数据类型以及基本使用详解

    MySQL数据类型以及基本使用详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL服务器的主要组件 我们知道MySQL的主要组件主要是由服务端(mysqld)和客户端 ...

  6. mysql互为主从实战设置详解及自动化备份(Centos7.2)

    mysql互为主从实战设置详解(Centos7.2) 第一步:mysql配置  my.cnf配置 服务器1 (10.89.10.90) [mysqld]  server-id=1  log-bin=/ ...

  7. mysql中event的用法详解

    一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...

  8. MySQL Cluster 配置文件(config.ini)详解

    MySQL Cluster 配置文件(config.ini)详解 ################################################################### ...

  9. mysql中SQL执行过程详解与用于预处理语句的SQL语法

    mysql中SQL执行过程详解 客户端发送一条查询给服务器: 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果.否则进入下一阶段. 服务器段进行SQL解析.预处理,在优化器生成对应的 ...

随机推荐

  1. Cognos两种建模工具对于复杂日期维度的处理比较(上)

    众所周知,在数据仓库中,日期维度是相当重要的.对数据分析的过程中可以从不同的角度去分析,比如按照下面的日期层次去分析数据. 年-季度-月-日 年-月-日 年-周-日 本示例将利用简单的商品销售分析的d ...

  2. XGBoost:在Python中使用XGBoost

    原文:http://blog.csdn.net/zc02051126/article/details/46771793 在Python中使用XGBoost 下面将介绍XGBoost的Python模块, ...

  3. 【PHP 】 伪静态 - 3. 伪静态的基本使用

    原理图: 原先浏览器输入的网址会发送到apache服务器,然后apache会调用php模块来处理,最后找到你所想访问的页面; 如果在apahce, httpd.conf文件中开启rewrite机制,则 ...

  4. 创建一个pre标签展开折叠的UI组件(原创)

    这些天练习UI组件的编写,顺便模仿一个h5版本的pre标签收缩展开的效果组件: 兼容ie8.9,谷歌,火狐: 图片效果如下: demo.html代码: <!DOCTYPE html> &l ...

  5. Eclipse里如何配制项目在tomcat中启动

    首先,在Eclipse中新建一个Hello工程,Workspace的位置在c:/eclipse/workspace,所以hello工程的位置就是在%Workspace%/hello/这个文件夹中.  ...

  6. DOM与JavaScript、jQuery之间的关系

    DOM(document object model) 其实是浏览器内元素对象的一个总称 我们用JavaScript对网页进行的所有操作都是通过DOM进行的.DOM属于浏览器,而不是JavaScript ...

  7. 算法笔记_125:算法集训之编程大题集一(Java)

     目录 1 砝码称重 2 公式解析 3 购物券消费方案 4 机器人行走 5 角谷步数 6 矩形区域的交和并 7 矩阵变换加密法 8 控制台表格 9 拉丁方块填数字 10 立方和等式   1 砝码称重 ...

  8. MySQL查看表结构三种方法

    1:desc T1 2:EXPLAIN T1 3:SHOW COLUMNS FROM T1

  9. 使用fiddler来抓包

    使用fiddler来抓包 Sniffer,wireshark,WinNetCap.WinSock Expert,SpyNet 都是当前流行的抓包工具 需要先做一些简单的准备工作: 一台带有无线网卡的P ...

  10. jquery选中以什么开头的元素

    $("[id^=percent]").size() ^=:表示以什么开头 $=:表示以什么结尾 ~=:表示包含什么 id:表示按id选择