MySQL数据库之mysql-5.7 密码过期详解
小标 2018-09-05 来源 : 阅读 1487 评论 0

摘要:本文主要向大家介绍了MySQL数据库之mysql-5.7 密码过期详解 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。

本文主要向大家介绍了MySQL数据库之mysql-5.7 密码过期详解 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。

一、起源:

  今天一上班就听到说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 ‘123456‘ 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、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的相关知识,希望对MySQL有兴趣的朋友有所帮助。了解更多内容,请关注职坐标数据库MySQL频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved