PHP, MySQL y longitud de los password

Warning: mysql_connect() [function.mysql-connect]: Premature end of data (mysqlnd_wireprotocol.c:554) in /XXXXXX on line 12
Warning: mysql_connect() [function.mysql-connect]: OK packet 1 bytes shorter than expected in /XXXXXX on line 12
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 /XXXXXX on line 12

Para aquellos que tengan instalado PHP 5.3 o superior y se intenten conectar a una base de datos mysql, sea de la forma que sea (PDO, mysql o mysqli) y le aparezca ese curioso mensajito que tenéis arriba sabréis (tras un par de consultas a nuestro viejo amigo google) que mysql desde la 4.1 o superior (como indica el mensaje) ha variado la longitud de las contraseñas de 16 a 41 (el hash).

El problema es que las librerías incluidas en PHP aun siguen erre que erre intentando conectarse a la vieja usanza y os lanzara el error que tenéis arriba (con vuestras lineas de código, claro). Que os quedara ojiplaticos y con cara de tontos.

Tranquilos, existen varias soluciones al respecto. La primera es la que indica, entrar en la base de datos (con un gestor que os de la gana o a pedal) con el usuario que tiene ese problema y colocar esa linea para transformar nuestro password de 16 a 41 «caracteres». Si entráis como root tendréis que seguir estos pasos:

UPDATE mysql.user SET Password = OLD_PASSWORD('password') WHERE Host = 'host' AND User = 'usuario';
FLUSH PRIVILEGES

Recordad que el FLUSH PRIVILEGES es importante porque sino, no vale para nada.

Otra solución, si entráis como root en la base de datos es poner:

SET old_passwords=1

O tocar el my.ini buscar la zona de [MYSQLD] y añadir:

old_passwords=1

O arrancar mysqld con la opción –old-passwords

O, por ultimo, actualizar el driver del php recompilandolo de nuevo. Lo más costoso pero que a la larga os librará de problemas.

Como veis, para un mismo problema hay cientos de soluciones, y cada cual debemos de coger el que más nos guste.

Aun con eso, si queréis más información y charlar un rato os recomendamos ver el foro de mysql y PHP oficial.

tuti

Técnico en Comunicación Interna de la UVa

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.