返回顶部
首页 > 资讯 > 数据库 >mysql 5.6.25报错ERROR 1372 (HY000): Password hash 的一点思考
  • 238
分享到

mysql 5.6.25报错ERROR 1372 (HY000): Password hash 的一点思考

2024-04-02 19:04:59 238人浏览 八月长安
摘要

问题背景:    之前使用的一套Mysql 5.6.25,由于一些原因我进行了清除。大家知道我们第二次执行mysql_install_db初始化数据库时,是不会存储root的临时密码

问题背景:

   之前使用的一套Mysql 5.6.25,由于一些原因我进行了清除。大家知道我们第二次执行mysql_install_db初始化数据库时,是不会存储root的临时密码。

那么要进入mysql数据库,就引入如下的一篇文章。

案例过程:

0,以无密码认证方式启动数据库

[root@standbygtid mysql]#nohup mysqld_safe  --user=mysql --skip-grant-tables&

1,配置root用户的密码

mysql> set passWord for 'root'@'localhost'='system';

ERROR 1290 (HY000): The MySQL Server is running with the --skip-grant-tables option so it cannot execute this statement

2,刷新修改用户密码的操作到mysql.user表

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

3,修改数据库用户密码,提示密码需要41个字节

mysql> set password for 'root'@'localhost'='system';

ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number

4,采用password函数修改用户密码成功

mysql> set password for 'root'@'localhost'=password('system');

Query OK, 0 rows affected (0.00 sec)

5,关闭数据库

[root@standbygtid mysql]#mysqladmin -uroot -psystem shutdown

6,启动数据库

[root@standbygtid mysql]# nohup mysqld_safe  --user=mysql&

7,可以用上述配置的数据库用户密码登陆

[root@standbygtid mysql]# mysql -uroot -psystem

Warning: Using a password on the command line interface can be insecure.

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 1

Server version: 5.6.25-enterprise-commercial-advanced MySQL Enterprise Server - Advanced Edition (Commercial)

Copyright (c) 2000, 2015, oracle and/or its affiliates. All rights reserved.

Oracle is a reGIStered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

8,password函数不管采用的字符串是多少位,产生的字节宽度全是 41

mysql> select password('system'),length(password('system'));

+-------------------------------------------+----------------------------+

| password('system')                        | length(password('system')) |

+-------------------------------------------+----------------------------+

| *576EE5B74C20E68F2A5A240F3E408E6DE43DD73F |                         41 |

+-------------------------------------------+----------------------------+

1 row in set (0.00 sec)

mysql> select password('syste'),length(password('syste'));

+-------------------------------------------+---------------------------+

| password('syste')                         | length(password('syste')) |

+-------------------------------------------+---------------------------+

| *795AF4045357E7DA27CBF22263514F881880C4AC |                        41 |

+-------------------------------------------+---------------------------+

1 row in set (0.00 sec)

9,上述 41字节到底是什么含义呢,查阅mysql 5.6官方文档,上述这个41个字节是和采用密码认证的方法有关系,而

采用密码认证的方法是由系统变量old_passwords控制。

10,old_passwords系统变量的含义

old_passwords控制password函数所使用的密码认证方法,它会影响create user以及grant操作如何产生数据库用户密码。

old_passwords的几个值

值 密码哈希方法                   密码哈希方法采用的插件          是否默认值

0  mysql 4.1版本采用的哈希方法     mysql_native_password        是

1  mysql 4.1之前的哈希方法         sha256_password

2  sha-256哈希方法                sha256_password

11,可见不同的old_password的值,会影响password函数产生的值的宽度

mysql> set old_passwords=0;

Query OK, 0 rows affected (0.00 sec)

mysql> select password('syste'),length(password('syste'));

+-------------------------------------------+---------------------------+

| password('syste')                         | length(password('syste')) |

+-------------------------------------------+---------------------------+

| *795AF4045357E7DA27CBF22263514F881880C4AC |                        41 |

+-------------------------------------------+---------------------------+

1 row in set (0.00 sec)

mysql> set old_passwords=1;

Query OK, 0 rows affected (0.00 sec)

mysql> select password('syste'),length(password('syste'));

+-------------------+---------------------------+

| password('syste') | length(password('syste')) |

+-------------------+---------------------------+

| 46acda267e174d58  |                        16 |

+-------------------+---------------------------+

1 row in set (0.00 sec)

mysql> set old_passwords=2;

Query OK, 0 rows affected (0.00 sec)

mysql> select password('syste'),length(password('syste'));

+----------------------------------------------------------------------+---------------------------+

| password('syste')                                                    | length(password('syste')) |

+----------------------------------------------------------------------+---------------------------+

| $5$\]^D8P`aMt\vp2Pu$lDCzMsToPBl56CdhB2pjetpvqEiL9BMhdt1TDbMbzL6  |                        68 |

+----------------------------------------------------------------------+---------------------------+

1 row in set (0.01 sec)

12,上述old_passwords的不同值是对应于下述不同的插件

mysql> show plugins;

+----------------------------+----------+--------------------+---------+-------------+

| Name                       | Status   | Type               | Library | License     |

+----------------------------+----------+--------------------+---------+-------------+

| mysql_native_password      | ACTIVE   | AUTHENTICATION     | NULL    | PROPRIETARY |

| mysql_old_password         | ACTIVE   | AUTHENTICATION     | NULL    | PROPRIETARY |

| sha256_password            | ACTIVE   | AUTHENTICATION     | NULL    | PROPRIETARY |

13,如果你想指定数据库在启动或创建时的默认的用户密码认证插件

这个插件是对应上述show plugins的值,而没有对应的系统变量,只有选项,见下

--default-authentication-plugin

可选值:

mysql_native_password     默认值

sha256_password

可以在启动数据库时在命令行上指定或者在配置文件中指定这个选项

14,如果在升级mysql时,一定要好好考量old_password的值或者--default-authentication-plugin,否则旧版本的mysql

客户端可能会登陆不上升级后的mysql数据库。

思考总结

  • 1,出现问题,根据错误提示进行字面意思分析

  • 2,出现问题,在官方手册查询对应出错语句的语法,可以获取进一步的诊断信息或线索

  • 3,提出的问题,一定要放在一个大的背景下,就是要向业务服务,你的业务的目标是什么,比如:数据库用户的可靠性及安全性,数据库马上要升级吗,数据库的性能,等等。

  • 4,数据库的学习是一个迭代式的过程,有些知识,不是一下子可以全面了解的,需要从字面或其它的技术反向进行进一步的掌握

大家可以关注我的微信公众号,每天会定期发送一些数据库相关的文章,欢迎交流。

mysql 5.6.25报错ERROR 1372 (HY000): Password hash 的一点思考

您可能感兴趣的文档:

--结束END--

本文标题: mysql 5.6.25报错ERROR 1372 (HY000): Password hash 的一点思考

本文链接: https://lsjlt.com/news/48736.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作