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

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

ПрограммыDataBaseБезопасностьMariaDB / MySQL

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

Фото О пользе мифических супер-программистов
О пользе мифических супер-программистов

10х-программисты, супер-звёзды от разработки и прочие мифические личности. В интернете кто-то прав. Но хочется уточнить.

Фото Решаем проблему ERROR 1348 column password is not updatable при обновлении пароля root в MySQL / MariaDB
Решаем проблему ERROR 1348 column password is not updatable при обновлении пароля root в MySQL / MariaDB

В MySQL есть временами непонятные ограничения, которые не позволяют привычным нам образом его использовать. Однако, если разобраться, то всё начинает иметь смысл.