千家信息网

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

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,问题背景:之前使用的一套mysql 5.6.25,由于一些原因我进行了清除。大家知道我们第二次执行mysql_install_db初始化数据库时,是不会存储root的临时密码。那么要进入mysql数据
千家信息网最后更新 2026年10月31日mysql 5.6.25报错ERROR 1372 (HY000): Password hash 的一点思考

问题背景:

之前使用的一套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,数据库的学习是一个迭代式的过程,有些知识,不是一下子可以全面了解的,需要从字面或其它的技术反向进行进一步的掌握

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

数据 数据库 密码 方法 用户 哈希 认证 函数 字节 插件 问题 不同 变量 系统 配置 业务 含义 字面 官方 宽度 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 有格互联网科技 美国互联网科技巨头监管 互联网科技的发展 深圳互联网络科技有限公司 安徽鑫晟辉互联网科技 长亮科技 互联网金融 卓越科技互联网 招聘 互联网科技公司的市场部门 广州优美互联网科技 银川新华互联网科技职业技术培训学校图片 福建科技产业互联网发展 彤创互联网科技有限公司 宝灵互联网科技有限公司 千方科技属于互联网企业吗 本届互联网博览会上的黑科技 四川慕妮娅互联网科技有限公司 山东子淼互联网科技有限公司 小米互联网科技园入驻 工业互联网科技创业 银川新华互联网科技学校是国营吗 手冲咖啡和咖啡机区别 互联网新科技 喔噻互联网科技 互联网女皇 腾讯科技 火传媒上海互联网科技 荆州市昕露互联网络科技有限公司 互联网科技研发水平 西安小鹰速贷互联网科技有限公司 晋城互联网科技 四川互联网展示科技馆设计
0