четверг, 15 марта 2012 г.

Старые пароли в MySQL

Один из разработчиков обратился с проблемой: его PHP 5.3 отказывался работать со старой идентификацией в MySQL
.
 Warning: mysql_connect() [function.mysql-connect]: mysqlnd cannot connect to MySQL 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` = 'юзер со старым хешом';