mysql数据库密码有效期_Mysql5.7.19密码已过有效期的处理过程(密码过期password_expired)...
测试环境中有使用mysql-5.7.19的版本,最近出现了一个状态:ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. 根据提示要重置密码,不然无法执行命令;这个问题的造成原因,居然是密码有效期过了导致的。
root用户登陆系统后的情况:
root@(none) 09:05:21>show processlist;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
root@(none) 09:09:02>show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
root@(none) 09:09:04>select host,user,password_last_changed from mysql.user;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
无法使用任何命令查看状态信息了;
怎么知道系统默认的有效期是多久呢?使用一个普通用登陆[未过期];默认系统的密码生命周期是360天就是一年这样了;
test01@(none) 09:11:43>show variables like 'default_password_lifetime';
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| default_password_lifetime | 360 |
+---------------------------+-------+
1 row in set (0.00 sec)
那么最直接的方法就是改密码啦,但是改了密码360天后一样会过期的,有办法可以变成永不过期吗?其实在5.7.11版本后都已经把默认值从360变成了0也就是永不过期了;
那么目前的解决方法:
步骤一:停止mysql服务
net stop mysql
步骤二:启动mysql,使用命令:
mysqld --skip-grant-tables
步骤三:登陆mysql
mysql -h localhost -P8806 -u root -proot
如果要认密码永不过期的话,可以使用以下方法:
步骤四、修改密码
set password=password('123456');
步骤五、设定密码的有效期为0,即永不过期;
set global default_password_lifetime=0;
在配置文件中添加配置;[如果不做上面修改,可以直接修改配置文件,但是改完后要重启服务才生效]
[mysqld]
default_password_lifetime=0
=========================我是分隔线啦=========================
当然上面的修改是全局的,如果你只想root用户密码不过期也可以这样配置:
步骤六:先查未修改前的记录是怎么样的?
root@(none) 09:27:34>select user,host,password_lifetime,password_last_changed,password_expired from mysql.user;
+-----------+-------------+-------------------+-----------------------+------------------+
| user | host | password_lifetime | password_last_changed | password_expired |
+-----------+-------------+-------------------+-----------------------+------------------+
| root | localhost | NULL | 2017-06-12 09:24:24 | N |
| mysql.sys | localhost | NULL | 2016-06-06 11:41:56 | N |
| checksums | 10.0.10.110 | NULL | 2017-05-06 10:41:38 | N |
| repl | 10.0.10.61 | NULL | 2017-05-05 11:18:11 | N |
| test01 | % | NULL | 2017-05-05 11:18:11 | N |
+-----------+-------------+-------------------+-----------------------+------------------+
7 rows in set (0.02 sec)
修改root密码永不过期:
root@(none) 09:29:34>alter user 'root'@'localhost' password expire never;
Query OK, 0 rows affected (0.00 sec)
修改后的效果,可以看到的是password_lifetime的值变成0了;
root@(none) 09:30:03>select user,host,password_lifetime,password_last_changed,password_expired from mysql.user;
+-----------+-------------+-------------------+-----------------------+------------------+
| user | host | password_lifetime | password_last_changed | password_expired |
+-----------+-------------+-------------------+-----------------------+------------------+
| root | localhost | 0 | 2017-06-12 09:24:24 | N |
| mysql.sys | localhost | NULL | 2016-06-06 11:41:56 | N |
| checksums | 10.0.10.110 | NULL | 2017-05-06 10:41:38 | N |
| repl | 10.0.10.61 | NULL | 2017-05-05 11:18:11 | N |
| test01 | % | NULL | 2017-05-05 11:18:11 | N |
+-----------+-------------+-------------------+-----------------------+------------------+
7 rows in set (0.00 sec)
如果要恢复到默认的策略,就是360天过期:
root@(none) 09:33:29>alter user 'root'@'localhost' password expire default;
Query OK, 0 rows affected (0.00 sec)
效果就是password_lifetime的值又变回NULL了,就是使用默认值了;
root@(none) 09:33:46>select user,host,password_lifetime,password_last_changed,password_expired from mysql.user;
+-----------+-------------+-------------------+-----------------------+------------------+
| user | host | password_lifetime | password_last_changed | password_expired |
+-----------+-------------+-------------------+-----------------------+------------------+
| root | localhost | NULL | 2017-06-12 09:24:24 | N |
| mysql.sys | localhost | NULL | 2016-06-06 11:41:56 | N |
| checksums | 10.0.10.110 | NULL | 2017-05-06 10:41:38 | N |
| repl | 10.0.10.61 | NULL | 2017-05-05 11:18:11 | N |
| test01 | % | NULL | 2017-05-05 11:18:11 | N |
+-----------+-------------+-------------------+-----------------------+------------------+
7 rows in set (0.00 sec)
为了模拟普通用户密码过期我把上面的用户test01修改一下;
root@mysql 11:43:42>update user set password_expired='Y' where user='test01';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
root@mysql 11:43:48>flush privileges;
Query OK, 0 rows affected (0.00 sec)
接下来换到test01登陆看看是否提示过期;
test01@(none) 11:44:19>show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
提示要重置密码了,就是说明直接修改配置文件生效了;
接下来使用root用户来更新test01的密码看有没有改变过期状态;
root@mysql 10:36:19>update user set authentication_string=password('12345678') where user='test01';
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 1
root@mysql 11:47:19>flush privileges;
Query OK, 0 rows affected (0.00 sec)
仔细看password_last_changed的值依旧没有改变,而password_expired的状态还是为Y,就是过期状态还是未改变;
root@mysql 10:39:02>select user,host,password_lifetime,password_last_changed,password_expired from mysql.user;
+-----------+-------------+-------------------+-----------------------+------------------+
| user | host | password_lifetime | password_last_changed | password_expired |
+-----------+-------------+-------------------+-----------------------+------------------+
| root | localhost | NULL | 2017-06-12 09:24:24 | N |
| mysql.sys | localhost | NULL | 2016-06-06 11:41:56 | N |
| test01 | % | NULL | 2016-01-02 12:12:12 | Y |
| checksums | 10.0.10.110 | NULL | 2017-05-06 10:41:38 | N |
| repl | 10.0.10.61 | NULL | 2017-05-05 11:18:11 | N |
+-----------+-------------+-------------------+-----------------------+------------------+
8 rows in set (0.00 sec)
使用test01登陆时已经是使用新密码了;
[root@mysql ~]# mysql -utest01 -p12345678
可是依旧提示密码过期,需要修改;
test01@(none) 10:34:45>show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
而test01的权限是怎么样的?
root@(none) 10:40:59>show grants for 'test01'@'%';
+-----------------------------------------------------+
| Grants for test01@% |
+-----------------------------------------------------+
| GRANT USAGE ON *.* TO 'test01'@'%' |
| GRANT ALL PRIVILEGES ON `percona`.* TO 'test01'@'%' |
+-----------------------------------------------------+
2 rows in set (0.00 sec)
不管怎么样,这个普通用户一旦过期了,root用户哪怕修改了它的密码,但是无法触发到过期状态的改变;而改变过期状态的方法有两种:
1、使用普通用户登陆后,自己修改密码,也可以改回旧密码:
test01@(none) 10:40:11>set passwordpassword=password('12345678');
Query OK, 0 rows affected, 1 warning (0.00 sec)
2、就是使用root用户把过期的值改为N;
root@mysql 10:49:11>update user set password_expired='N' where user='test01';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
root@(none) 10:49:51>flush privileges; #root用户改了状态,记录要flush权限不然用普通用户立刻登陆还是不生效的。
Query OK, 0 rows affected (0.00 sec)
密码过期的参考文档:
https://bugs.mysql.com/bug.php?id=77277
mysql数据库密码有效期_Mysql5.7.19密码已过有效期的处理过程(密码过期password_expired)...相关推荐
- mysql 192.168.0.%_如果mysql数据库所在的主机IP是192.168.0.1,用户名是ec,密码是123456,则用php连接这个mysql数据库的命令可以写为:...
[单选题]患者,老年女性.主诉头痛伴眩晕,呕吐半小时,到急诊科就诊.分诊护士可采用的问诊模式为 [填空题]妇人中风,七八日,续得寒热,发作时,经水适断者,此为__________.__________ ...
- mysql数据库密码错误_MySQL数据库经典错误六 数据库密码忘记的问题
数据库密码忘记的问题[root@zs ~]# mysql -uroot -p Enter password: ERROR 1045 (28000): Access denied for user 'r ...
- win7上修改MySQL数据库密码
一.通过命令行方式修改MySQL密码 1.方法一:用mysqladmin 格式:mysqladmin -u用户名 -p旧密码 password 新密码 实例:mysqladmin -uroot -pa ...
- Linux系统下修改mysql数据库密码
修改mysql数据库的方法有很多种.这个方法适用于忘记root用户密码或者刚安装mysql要进入mysql时发现系统报错及觉得默认密码太复杂想修改密码的. 1.修改 /etc/my.cnf 文件 在 ...
- dapper mysql_.NET Core Dapper操作mysql数据库
.NET Core Dapper操作mysql数据库 发布时间:2019-04-25 19:48, 浏览次数:744 , 标签: NET Core Dapper mysql 前言 现在ORM盛行,市面 ...
- 《php开发典型模块大全》读书笔记 第三章 mysql数据库基础
第三章 mysql基础 show columns from table describe table alter table 修改表 rename table t1 to t2 整型 ...
- MySQL数据库+命令大全+常用操作
格式:mysql -h主机地址 -u用户名 -p用户密码 1. 例:连接到本机上的MYSQL 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示 ...
- mysql数据库查询缓存_MySQL查询缓存与数据库管理
MySQL查询缓存与数据库管理 上一篇 / 下一篇 2010-01-25 21:51:07 / 个人分类:MYSQL/Cache MySQL查询缓存 注意:查询缓存绝不返回过期数据. 如果一个表发生 ...
- MySQL数据库“十宗罪”(十大经典错误案例)
各位技术老铁们,福利来了!今天给大家说说<数据库中十大经典错误案例> 老张我在刚开始学习数据库的时候,没少走弯路.经常会遇到各种稀奇古怪的 error 信息,遇到报错会很慌张,急需一个解决 ...
最新文章
- 如何利用azMan (Authorization Manager) 实现 role-based的安全验证机制
- 编译gtk+程序报错gcc: pkg-config --cflags --libs gtk+-2.0: 没有那个文件或目录
- Linux终端中设置vi编辑命令
- 内存中OLTP(Hekaton)的排序警告
- Hibernate Annotation中英文文档链接下载 (Hibernate 注解)
- 关于c++的文件编码的研究
- linux lsm 程序加载钩函数,LSM在Linux中的实现方式
- 使用Arquillian,Docker和Selenium使Web UI测试再次变得出色(第1部分)
- 《Python Cookbook 3rd》笔记(1.8):字典运算
- EasySchedulerr大数据调度系统架构分析
- #9733;宣传广告变成社会标准
- 使用google的jib, 发布Docker镜像到阿里云
- 人的一生该怎样度过?
- PON光模块相关知识
- 怎么理解什么是大数据呢?
- Boggle问题积累
- windows系统下自定义图标
- 联想小新13pro锐龙版网卡_联想小新Pro13 锐龙版简测
- 初始化磁盘选哪个格式 初始化磁盘分区形式选什么好
- mysql函数中打印信息_mysql信息函数