PHP 5.3 и поддержка old passwords в MySQL

Очень любопытно — PHP наконец-то начал насаживать довольно старые стандарты — но почему-то от них не могут отказаться миллионы разработчиков.

После обновления PHP и либы mysqlnd один из production-серверов вскрякнул:

Warning: mysql_connect() [function.mysql-connect]: Premature end of data (mysqlnd_wireprotocol.c:554) in ...
Warning: mysql_connect() [function.mysql-connect]: OK packet 1 bytes shorter than expected in ...
Warning: mysql_connect() [function.mysql-connect]: mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD('your_existing_password'). This will store a new, and more secure, hash value in mysql.user. If this user is used in other scripts executed by PHP 5.2 or earlier you might need to remove the old-passwords flag from your my.cnf file in ...

Ларчик просто открывается — собственно, все и написано в ошибке. Старый хеш имеет длину в 16 символов, новые — в 41. До сих пор даже в самых последних версиях MySQL не могут по каким-то причинам отказаться от старых паролей и таскают в конфиге этот allow_old_passwords = 1.

Ну, надо идти в ногу со временем.

SELECT `user` FROM `mysql`.`user` WHERE LENGTH(`Password`) = 16;

Ну и

UPDATE `mysql`.`user` SET `Password` = PASSWORD('старый пароль') WHERE `user` = 'юзер со старым хешом';

Удивительно только как проникает-то туда! Подозреваю что это все злой phpMyAdmin с его автоматическими созданиями юзеров

Комментировать

Войдите чтобы оставить комментарий.