Actualizado el 14-01-2007
versión para imprimir
Problemas de conexión con MySQL 4.1
MySQL ha cambiado el sistema de encriptado de contraseñas a partir de las series 4.1
Es posible que en una nueva instalación de MySQL te encuentres el siguiente escenario:
- El servidor está correctamente instalado. Puedes arrancar y apagar el server sin problema
- Puedes utilizar sin problemas todas las aplicaciones de mysql.com: por ejemplo la linea de comandos (mysql), Mysql administrator o Mysql Query Browser.
- Sin embargo, cuando intentas conectar con MySQL con un script php correctamente configurado te sale el siguiente error en el navegador:
Client does not support authentication protocol requested by server; consider upgrading MySQL client
Si bien no he encontrado documentado este problema suficientemente, este mensaje de error significa que el cliente (php en este caso) no entiende el nuevo sistema de encriptado.
La mejor solución sería adaptar php al nuevo encriptado ... pero no se como hacerlo.
Creando el nuevo usuario
mysql> GRANT ALL PRIVILEGES ON *.* TO 'pepe'@'localhost'
-> IDENTIFIED BY 'contraseña' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'pepe'@'%'
-> IDENTIFIED BY 'contraseña' WITH GRANT OPTION;
shell> mysql
Donde creamos dos usuarios 'pepe' (usa el nombre que quieras) el primero solo podrá conectarse desde localhost y el segundo desde cualquier ordenador, ambos protegidos por contraseña.
Cambiando la contraseña
Solo resta cambiar la contraseña al viejo sistema para pepe:
mysql> SET PASSWORD FOR
-> 'pepe'@'localhost' = OLD_PASSWORD('contraseña');
mysql> SET PASSWORD FOR
-> 'pepe'@'%' = OLD_PASSWORD('contraseña');
la contraseña de pepe estará ahora encriptada en el sistema anterior, y podrá ser utilizada por tus scripts. Recuerda cambiar los datos en el config file de cada script, usando el nuevo usuario y contraseña.
Advertencias
Si no se trata de una instalación nueva, sino que has actualizado sobre otra ya existente, quizás el problema sea otro, por ejemplo que ha cambiado la estructura de la tabla de permisos.
Esta página no trata este supuesto.
Esta solución servirá en tanto se descubra como arreglarlo desde php. Si sabes como, no dudes en decirmelo (webmaster@ignside.net).
Un amable lector sugirió, pocos dias despues de publicar este artículo por primera vez, que la solución mas correcta era sustituir el archivo libmySQL.dll que viene en el directorio raiz de php por el archivo del mismo nombre que encontrarás en la carpeta /bin/ de MySQL. No he probado esta solución, pero lo haré próximamente. La solución definitiva (solo con php5) es cambiar los scripts a MySQLi, pero esta extensión todavia no está muy difundida.
Naturalmente, el viejo sistema de encriptación es ligeramente mas inseguro que el nuevo. Pero el viejo funciona, el nuevo, no desde php
Esta solución sirve solamente para el mensaje de error citado. Otros problemas de conexión tienen diferentes soluciones
Puedes conservar tu usuario 'root' original para conectar con las utilidades de mysql.com y el nuevo usuario para conectar desde php