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解析.预处理,在优化器生成对应的 ...
随机推荐
- [转载]C++中处理XML文件
写Unmanaged Code在.NET时代成为一种很悲惨的事,当你需要处理XML文件时,这种感觉会变得尤其强烈.FCL中的System.XML多简单啊,连Steve Ballmer都知道怎么用. ...
- 在不重装系统的情况下撤底删除oracle数据库及oralce的相关软件
先从控制面板删除oracle的相关应用及数据库, 删除系统变量 ORACLE_OEM_CLASSPATH=%JAVA_HOME%\lib\ext\access-bridge-64.jar;%JAVA_ ...
- ZOJ 3587 扩展KMP
思路:这题确实大帝做得非常机智!字符串先求最长前缀,反的字符串再求一次最长前缀.然后就能够搞了. 每一个子串出现的次数就是最长前缀的次数嘛! #pragma comment(linker, " ...
- wireshark 的使用(filter的用法)
转自:http://blog.csdn.net/hanyuxinting/article/details/5558095 过滤器语法---------------------------------- ...
- awk的使用
http://www.cnblogs.com/chengmo/archive/2010/10/08/1845913.html linux awk 内置函数详细介绍(实例) awk内置字符串函数 awk ...
- 嵌套循环连接(nested loops join)原理
嵌套循环连接(nested loops join) 访问次数:驱动表返回几条,被驱动表访问多少次. 驱动表是否有顺序:有. 是否要排序:否. 应用场景: 1.关联中有一个表比较小: 2.被关联 ...
- Windows下安装配置SBT
1:安装包下载界面 http://www.scala-sbt.org/download.html 下载后进行安装. 安装路径:D:\Java\sbt\conf 2:进行配置 (1)sbtconfig. ...
- D. Flowers Codeforces Round #271(div2)
D. Flowers time limit per test 1.5 seconds memory limit per test 256 megabytes input standard input ...
- C和C++静态检查规范
- ubuntu 下安装摄像头驱动
sudo apt-get install cheese sudo apt-get install camorama 然后可以打开应用cheese,观察可以得到图像. 也可以通过代码获取图像.pytho ...