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

Автор: | 16/07/2018

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

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

[simterm]

MariaDB [(none)]> CREATE USER 'ruser'@'%' IDENTIFIED BY PASSWORD 'password';
ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number

[/simterm]

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

[simterm]

MariaDB [(none)]> GRANT USAGE ON *.* TO 'ruser'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)

[/simterm]

Проверяем:

[simterm]

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)

[/simterm]

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

[simterm]

MariaDB [(none)]> SELECT PASSWORD('password');
+-------------------------------------------+
| PASSWORD('password')                      |
+-------------------------------------------+
| *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
+-------------------------------------------+
1 row in set (0.24 sec)

[/simterm]

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

[simterm]

MariaDB [(none)]> GRANT USAGE ON *.* TO 'ruser'@'%' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19';
Query OK, 0 rows affected (0.00 sec)

[/simterm]

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

Готово.