美文网首页
Mysql相关问题

Mysql相关问题

作者: 小白正在飞 | 来源:发表于2018-04-24 17:34 被阅读0次

    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版开始,用户的密码过期时间这个特性得以改进,可以通过一个<mark style="box-sizing: border-box;">全局变量default_password_lifetime来设置密码过期的策略</mark>, 此全局变量可以设置一个全局的自动密码过期策略。

    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相关问题

          本文链接:https://www.haomeiwen.com/subject/wvgjlftx.html