千家信息网

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

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,问题背景:之前使用的一套mysql 5.6.25,由于一些原因我进行了清除。大家知道我们第二次执行mysql_install_db初始化数据库时,是不会存储root的临时密码。那么要进入mysql数据
千家信息网最后更新 2025年02月01日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安全错误 数据库的锁怎样保障安全 保定缘汇软件开发公司怎么样 成都农行软件开发中心怎么样 网络安全制作书签 方舟手游如何创建服务器跟朋友玩 免费云服务器安装windows 网络安全设备厂家出货代理 淘宝搜索指数指哪些数据库 校园网络安全标语百度文库 学习网络技术工程师需要什么准备 网络安全手抄圾内容50 java中数据库修改语 聚合网络技术影响因素 手机软件开发公司有哪些呢 中国移动公安网络安全 卫生院网络安全管理制度范本 软件开发云套餐的区别 计算机网络技术收获总结 软件开发企业年度经营计划 西部服务器管理助手 首都网络安全日今年第几届 国外城市数据库 数据库恢复技术日志记录 网络安全两库两清单怎么回事 垣曲线网络技术 分布式数据库关键技术 数据库服务处理速度慢 网络安全知识图谱补全 世界贸易组织数据库使用 服务器 笔记本 首都网络安全日今年第几届
0