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解析.预处理,在优化器生成对应的 ...
随机推荐
- HDoj-1863-畅通project-并查集
畅通project Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- Pinger
import java.io.IOException;import java.io.InputStreamReader;import java.io.LineNumberReader;import j ...
- IP综合
获取客户端IP的常用方法和注意事项: 进阶一:常用的方法,但是不够严谨. function getIP() { if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) ...
- Android开发之发送邮件功能的实现(源码分享)
Android开发中可能会碰到怎样发送邮件的困扰,之前我也查了相关的文档,博友们也分享了不少的发送邮件的办法.总共同拥有3种把,我细致阅读了下,发现有的讲的太过复杂跟麻烦,不够清晰.我今天就来分享下我 ...
- Php优化方案
1.尽量静态化: 如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍. 当然了,这个测试方法需要在十万级以上次执行,效果才明显. 其实静态方法和非静态方法的 ...
- plsql 常用快捷键(自动替换)
plsql 常用快捷键 CreateTime--2018年4月23日17:33:05 Author:Marydon 说明:这里的快捷键,不同于以往的快捷键,输入指定字符,按快捷键,可以自动替换成你 ...
- html中文乱码问题的解决
当我试着用html写代码的时候,发现直接保存的文件用浏览器打开时中文显示是乱码的,所以我找了一些解决方法,可是原因不太明白,所以我也就不解释了,能够自己找找原因,以下提供解决方法: 在写的html的第 ...
- web页面中可以包含多个对象
# encoding=utf-8 #python 2.7.10 #xiaodeng #web页面中可以包含多个对象 #HTTP权威指南 10页 #应用程序完成一项任务时通常会发布多个http事务.如: ...
- python之模块csv之CSV文件的写入(基本结构)
# -*- coding: utf-8 -*- #python 27 #xiaodeng #CSV文件的写入(基本结构) import csv #csv文件,是一种常用的文本格式,用以存储表格数据,很 ...
- 关于LoadRunner的迭代
通过用lr做负载压力测试过程发现,如果设定不同的action迭代次数,每次得出的结果是不同的,曲线的表现形式也是不同的.这点就使我们会感觉困惑,为什么要设置action的迭代次数?以及对于不同的应用系 ...