2012-05-02 12 views
11

Sé que hay una tonelada de preguntas similares, de hecho, he leído las (9) de ellas.PHP 5.4 PDO no se pudo conectar a MySQL 4.1+ usando la autenticación insegura anterior

Sin embargo, ninguno de ellos resuelve mi problema.

Tengo un paquete de alojamiento compartido (el mínimo). Lo que está incluido en mi paquete es el nombre de dominio y una dirección IP separada donde se aloja el servidor MySQL. Para el desarrollo, estoy usando http://localhost/ con el servidor de desarrollo de PHP 5.4, y estoy usando el servidor MySQL que obtengo en mi paquete de alojamiento.

El problema surge solo en mi PC, porque he instalado PHP 5.4, pero mi servidor web ha instalado PHP 5.2.17 y no se actualizará. El servidor MySQL está en MySQL 5.1.50.

Afortunadamente, phpMyAdmin tiene incorporada la función "Cambiar contraseña".

Hay dos opciones de hash en phpMyAdmin para cambiar una contraseña:

  • MySQL 4.1+
  • MySQL 4.0 compatible

He cambiado la contraseña con la opción de MySQL 4.1 o superior, y confirmó que la actualización fue exitosa.

El perfil ha sido actualizado. SET PASSWORD = PASSWORD('***')

Sin embargo, cuando se llevo a cabo esta consulta:

SELECT @@global.old_passwords, @@session.old_passwords, Length(PASSWORD('abc')); 

Se me dice que la longitud de la contraseña sigue siendo 16. Producto:

1  1  16 

Y así el problema persiste

No se pudo conectar a la base de datos. SQLSTATE [HY000] [2000] mysqlnd no se puede conectar a MySQL 4.1+ utilizando la autenticación insegura anterior. Utilice una herramienta de administración para restablecer su contraseña con el comando SET PASSWORD = PASSWORD ('your_existing_password'). Esto almacenará un valor hash nuevo y más seguro en mysql.user. Si este usuario se utiliza en otros scripts ejecutados por PHP 5.2 o anterior puede que tenga que quitar la vieja bandera de contraseñas de su archivo my.cnf

También he intentado hacer estas consultas, cuando se haya identificado con el usuario DBO en phpMyAdmin:

SET SESSION old_passwords=0; 
[phpMyAdmin reloads to the home screen, but the value remains = 1] 

SET GLOBAL old_passwords = 0; 
#1227 - Access denied; you need the SUPER privilege for this operation 

FLUSH PRIVILEGES; 
#1227 - Access denied; you need the RELOAD privilege for this operation 

Esto es contradictorio con lo que se establece en el menú del servicio de hosting para configurar el usuario DBO:

base de datos propietario
Cuando se crea una nueva base de datos, y Es necesario especificar un usuario de propietario de la base de datos (DBO), que tendrá
acceso total de administrador a la base de datos.

¿Es esto algo que tengo que tratar con mis webhosts? ¿O puede ser resuelto por mi usuario DBO? De lo contrario, ¿se puede omitir esto en PHP? (ya que funciona con PHP 5.2.17 pero no con PHP 5.4)

+1

Están atascados en PHP 5.2.17 (2011-01-06) y MySQL 5.1.50 (03/08/2010) y no se actualizan? Yo diría mudarse a un nuevo host. Pero a pesar de eso, siempre debe desarrollar y probar localmente con las mismas versiones que implementa para evitar este tipo de problema. –

Respuesta

32

¡RESUELTO!

Aunque el SET SESSION old_passwords=0; no funcionaba en phpMyAdmin.

he descargado el MySQL GUI Tools y se utiliza MySQL Query Browser para ejecutar el mismo comando en la no-usuario DBO:

SET SESSION old_passwords = 0;

SELECT @@global.old_passwords, @@session.old_passwords, Length(PASSWORD('abc'));

ahora devuelto:

1  0  41 

Así Simplemente cambié la contraseña:

SET PASSWORD = PASSWORD('my_old_password')

Y ahora PHP 5.4 PDO se conecta a la base de datos con ese usuario.

+2

¡Esto funcionó para mí, excelente hombre! – hiennt

+2

Sí, buen trabajo :) También funcionó bien a través de la consola de mysql –

+1

¡También funcionó para mí! –

3

En phpMyAdmin, la configuración de la variable de sesión funcionará, pero la llamada a la función de contraseña debe ocurrir en la misma sesión/ejecución.

Por ejemplo, si ejecuto:

SET SESSION old_passwords = 0; 
SET PASSWORD = PASSWORD('notagoodpassword'); 

esta forma se establece correctamente.

+0

bueno saber que también funciona desde PMA – qdev

+0

Muchas gracias :) ejecutando ambos las consultas al mismo tiempo me convencieron más que cualquier otra solución –

+0

Esto funcionó para mí. ¡Gracias! :-) – Jacob

-1

esta solución funcionó: SET SESSION old_passwords = 0;

PERO: Tuve que soltar la tabla de descongelamiento de usuario "vieja" y crearla nueva; luego funcionó como un amuleto.

Cuestiones relacionadas