1.Mysql密码过期问题处理
跳过授权表
1. /etc/init.d/mysqld stop
2. mysqld_safe –skip-grant-tables &(或者修改配置文件 [mysqld] skip grant tables)
3. 登录mysql(无密码)
4. update mysql.user set authentication_string=password(‘123456’) where user=’root’ and Host = ‘%’;(此处修改后localhost依然无法登录修改Host=’localhost’)
5. flush privileges
6. 登录后
- [ ] 本机mysql过期 set password = password(‘123456’);
- [ ] 服务器mysql过期,需要修改指定用户的password 以root@% 为例 > set password for ‘root’@’%’ = password(‘123456’);
从MySQL 5.7.4版开始,用户的密码过期时间这个特性得以改进,可以通过一个==全局变量default_password_lifetime来设置密码过期的策略==,
此全局变量可以设置一个全局的自动密码过期策略。
2.Mysql版本新增知识和内容
在MySQL5.7的配置文件中设置一个默认值,这会使得所有MySQL用户的密码过期时间都为90天,MySQL会从启动时开始计算时间。
例如在my.cnf里添加:
[mysqld]
default_password_lifetime=90
这会使得所有MySQL用户的密码过期时间都为90天,MySQL会从启动时开始计算时间。
如果要设置密码永不过期的全局策略,可以设置default_password_lifetime=0,或者在命令行设置:
mysql> SET GLOBAL default_password_lifetime = 0;
Query OK, 0 rows affected (0.00 sec)
==从MySQL版本5.6.6版本起,添加了password_expired功能,它允许设置用户的过期时间==
mysql> use mysql;
mysql> alter user root@'localhost' password expire;
Query OK, 0 rows affected (0.23 sec)
在用户未设置新密码之前不能运行任何查询语句,而且会得到如下错误消息提示:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
执行完后看到密码改动时间
mysql> alter user root@localhost identified by 'fangcang';
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host,password_last_changed,password_expired from user;
+-----------+-----------+-----------------------+------------------+
| user | host | password_last_changed | password_expired |
+-----------+-----------+-----------------------+------------------+
| root | localhost | 2018-04-23 11:04:26 | N |
| mysql.sys | localhost | 2017-10-27 11:22:50 | N |
| root | % | 2017-10-27 14:18:02 | N |
+-----------+-----------+-----------------------+------------------+
3 rows in set (0.00 sec)
==在MySQL 5.7.8版开始用户管理方面添加了锁定/解锁用户账户的新特性==
mysql> alter user mdba@localhost account lock;
Query OK, 0 rows affected (0.04 sec)
重新登录发现被拒绝:
[root@localhost ~]# mysql -u mdba -p
Enter password:
ERROR 3118 (HY000): Access denied for user 'mdba'@'localhost'. Account is locked.
解锁后恢复正常:
mysql> alter user mdba@localhost account unlock;
Query OK, 0 rows affected (0.03 sec)
3.网上搜索到的坑
1、以下这种方式不能解决密码过期问题
update mysql.user set authentication_string=password('123456') where user='root' and Host = '%';
2、修改password_last_changed不能解决密码过期问题。
3、mysql早前的版本user表有password字段,5.7为authentication_string。
4、不需要重启mysql服务器。
5、root@localhost和root@%不是同一个用户。
查看用户信息的sql如下
select host,user,password_last_changed from mysql.user;