Error 1372 hy000 password hash should be a 41 digit hexadecimal number

MySQL и её новая сестричка из мира СПО – MariaDB довольно сильно распространены на хостингах, да и LAMP никто не отменял – пользуются ещё. Так вот не так давно стала возникать эта ошибка. Как её чинить? В этой заметке.

MySQL и её новая сестричка из мира СПО – MariaDB довольно сильно распространены на хостингах, да и LAMP никто не отменял – пользуются ещё. Так вот не так давно стала возникать эта ошибка. Как её чинить? В этой заметке.

MySQL – это в прошлом открытая система управления базами данных. После
покупки Sun компанией Oracle, MySQL стала принадлежать последней.
Но свободный код позволил сделать ответвление – MariaDB (нельзя было
использовать именно название «MySQL»). Потому эти базы данных и похожи.

И так и там при создании пользователя нужно указать, как будет авторизоваться
пользователь. И там и там часто пишут нечто-то следующее (с версии 5.7):

mysql> GRANT USAGE ON *.* TO 'user'@'localhost' IDENTIFIED BY PASSWORD 's3cr3t';

На что получают:

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

А с некоторых пор (MySQL Server 8.0) и вообще:

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near

И это правильно, ведь функция PASSWORD предоставляет очень слабое хеширование:

mysql> SELECT PASSWORD('xyz123');
54fg56gs32sgi3862

Такой короткий хеш может быть причиной взлома перебором.

Вместо этого вы можете писать:

mysql> GRANT USAGE ON *.* TO 'user'@'localhost' IDENTIFIED BY 's3cr3t';
Query OK, 0 rows affected (0.00 sec)

В этом случае MySQL и MariaDB будут использовать более стойкий хеш, и ошибки не будет.

В MySQL име­ет­ся функ­ция PASSWORD() для полу­че­ния хеша из стро­ки с паро­лем, кото­аря исполь­зу­ет­ся самим MySQL для про­вер­ки авторизации.

При добав­ле­нии поль­зо­ва­те­ля с исполь­зо­ва­ни­ем этой функ­ции и при пере­да­чи паро­ля откры­тым тек­стом — воз­ни­ка­ет ошибка:

MariaDB [(none)]> CREATE USER ‘ruser’@’%’ IDENTIFIED BY PASSWORD ‘password’;

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

Вари­ант пер­вый — не исполь­зо­вать PASSWORD(), и пере­дать пароль открытым:

MariaDB [(none)]> GRANT USAGE ON *.* TO ‘ruser’@’%’ IDENTIFIED BY ‘password’;

Query OK, 0 rows affected (0.00 sec)

Про­ве­ря­ем:

MariaDB [(none)]> SHOW GRANTS FOR ‘ruser’@’%’;

+——————————————————————————————————+

| Grants for ruser@% |

+——————————————————————————————————+

GRANT USAGE ON *.* TO ‘ruser’@’%’ IDENTIFIED BY PASSWORD ‘*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19‘ |

+——————————————————————————————————+

1 row in set (0.00 sec)

Вари­ант вто­рой — таки сна­ча­ла полу­чить хеш паро­ля, вызвав PASSWORD()напря­мую:

MariaDB [(none)]> SELECT PASSWORD(‘password’);

+——————————————-+

PASSWORD(‘password’)                      |

+——————————————-+

| *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |

+——————————————-+

1 row in set (0.24 sec)

И затем исполь­зо­вать его при добав­ле­нии пользователя:

MariaDB [(none)]> GRANT USAGE ON *.* TO ‘ruser’@’%’ IDENTIFIED BY PASSWORD ‘*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19‘;

Query OK, 0 rows affected (0.00 sec)

Обра­ща­ем вни­ма­ние на * в нача­ле строки.

Гото­во.

https://github.com/midnight47/

When you creating a new user for a MySQL server with the below method sometime you may get this below error.

Ex:

mysql>grant all privileges on *.* to ‘root’@’localhost’ identified by password ‘welcome’;

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

Solution:

mysql> select password (‘welcome’);

+——————————————-+
| password (‘welcome’)           |
+——————————————-+
| *DF216F57F1F2066124E1AA5491D995C3CB57E4C2 |
+——————————————-+

1 row in set (0.02 sec)

mysql>grant all privileges on *.* to ‘root’@’localhost’ identified by password ‘*DF216F57F1F2066124E1AA5491D995C3CB57E4C2’;

 Query OK, 0 rows affected (0.02 sec)

mysql>flush privileges;

 Query OK, 0 rows affected (0.02 sec)

Now the error gone.Try this when you are getting this error.

Better always try this below way to create MySQL user.

mysql>grant all privileges on *.* to ‘root’@’localhost’ identified by ‘welcome’;

Query OK, 0 rows affected (0.00 sec)

mysql>flush privileges;

Query OK, 0 rows affected (0.02 sec)

В MySQL имеется функция PASSWORD() для получения хеша из строки с паролем, котоаря используется самим MySQL для проверки авторизации.

При добавлении пользователя с использованием этой функции и при передачи пароля открытым текстом — возникает ошибка:

MariaDB [(none)]> CREATE USER ‘ruser’@’%’ IDENTIFIED BY PASSWORD ‘password’;

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

Вариант первый — не использовать PASSWORD(), и передать пароль открытым:

MariaDB [(none)]> GRANT USAGE ON *.* TO ‘ruser’@’%’ IDENTIFIED BY ‘password’;

Query OK, 0 rows affected (0.00 sec)

Проверяем:

MariaDB [(none)]> SHOW GRANTS FOR ‘ruser’@’%’;

+——————————————————————————————————+

| Grants for ruser@%                                                                                   |

+——————————————————————————————————+

| GRANT USAGE ON *.* TO ‘ruser’@’%’ IDENTIFIED BY PASSWORD ‘*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19’ |

+——————————————————————————————————+

1 row in set (0.00 sec)

Вариант второй — таки сначала получить хеш пароля, вызвав PASSWORD()напрямую:

MariaDB [(none)]> SELECT PASSWORD(‘password’);

+——————————————-+

| PASSWORD(‘password’)                      |

+——————————————-+

| *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |

+——————————————-+

1 row in set (0.24 sec)

И затем использовать его при добавлении пользователя:

MariaDB [(none)]> GRANT USAGE ON *.* TO ‘ruser’@’%’ IDENTIFIED BY PASSWORD ‘*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19’;

Query OK, 0 rows affected (0.00 sec)

Обращаем внимание на * в начале строки.

Готово.

Понравилась статья? Поделить с друзьями:
  • Error 1370 execute command denied to user
  • Error 137 что это
  • Error 137 майнкрафт
  • Error 137 kubernetes
  • Error 137 error name resolution failed