Программы
Решаем проблему ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number и Error Code: 1064 в MySQL / MariaDB

Решаем проблему ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number и Error Code: 1064 в MySQL / MariaDB

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 будут использовать более стойкий хеш, и ошибки не будет.