Dopo aver aggiornato un server PHP da PHP 5.3.3 a PHP 5.6.x, lavorando con MySQL Server 5.1.x su una semplice casella CentOS 6.x a 64 bit, alcune nuove app Web mostravano questo errore di connessione mysqlnd: mysqlnd non può connettersi a MySQL 4.1+ utilizzando la vecchia autenticazione non sicura
Questo era l'errore completo ed esatto:
mysqlnd non può connettersi a MySQL 4.1+ utilizzando la vecchia autenticazione non sicura. Utilizzare uno strumento di amministrazione per reimpostare la password con il comando SET PASSWORD =PASSWORD('your_existing_password'). Questo memorizzerà un nuovo valore hash più sicuro in mysql.user. Se questo utente viene utilizzato in altri script eseguiti da PHP 5.2 o precedenti, potrebbe essere necessario rimuovere il flag old-passwords dal file my.cnf
Ciò accade perché il nuovo client php mysqlnd si rifiuta di lavorare con le password vecchio stile di MySQL. Quindi, anche se hai old_passwords=1, questo non funzionerà per queste nuove app web, che richiedono una maggiore sicurezza dell'hash delle password.
Come posso correggere l'errore che mysqlnd non riesce a connettersi a MySQL 4.1+ utilizzando la vecchia autenticazione non sicura?
Questo errore può essere corretto facilmente se segui i passaggi successivi:
Modifica il file di configurazione MySQL principale:
nano -w /etc/my.cnf
Modifica:
old_passwords=1
a
old_passwords=0
Applicare le modifiche:
service mysqld restart
Connettiti alla console MySQL come root:
mysql -u root -p
Ora reimposta la password utente per utilizzare il nuovo hash:
SET PASSWORD FOR 'mysqluser'@'localhost'=PASSWORD('passwordhere'); flush privileges;
Sostituisci "mysqluser" e "passwordqui" con il tuo nome utente e password reali.
Ora torna su /etc/my.cnf e ripristina le modifiche apportate in precedenza, imposta:
old_password=1
Riavvia MySQL per applicare le modifiche:
service mysqld restart
Fatto tutto, ora il tuo utente dovrebbe utilizzare l'hash della password MySQL più potente.
Questo può essere verificato dalla console MySQL usando questo comando:
mysql> SELECT user, Length(Password) FROM mysql.user; +------------------+------------------+ | user | Length(Password) | +------------------+------------------+ | root | 16 | | forum_user | 16 | | user2 | 41 | | lorex | 41 | | m3user | 16 |
Se vedi '41', allora quell'utente sta usando il nuovo hash e '16' significa che sta usando il vecchio hash.
Fatto tutto, a questo punto il tuo errore mysqlnd non può connettersi a MySQL 4.1+ usando la vecchia autenticazione non sicura dovrebbe essere corretto e dovresti essere in grado di lavorare normalmente con le tue applicazioni web.
Come risolvere il problema:mysqlnd non può connettersi a MySQL 4.1+ utilizzando la vecchia autenticazione non sicura Ultima modifica:7 febbraio 2017 da Esteban Borges