Mysql相关问题

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;

你可能感兴趣的:(Mysql相关问题)