Per questioni di sicurezza, con l'evoluzione delle versioni, MySQL ha modificato l'hash con cui vengono memorizzate le password delle utenze che possono accedere ai database. Le vecchie password sono memorizzate con un hash di 16 caratteri le nuove di 41. Per verificarlo basta visualizzare il contenuto della tabella user del database mysql.
Se si utilizza una versione di MySQL successiva alla 4.1, ma nel file di configurazione my.cnf è stata impostata la direttiva:
PHP, versione 5.3 e successive, per la connessione usa di default il driver mysqlnd che adotta il nuovo algoritmo di hash.
Risulta evidente come la combinazione di queste variabili possa portare alla generazione dell'errore sopra riportato.
Se si utilizza PHP 5.3 o superiore ed una versione di MySQL superiore alla 4.1 una soluzione può essere eliminare il flag old-passwords=1 da my.cnf (riavviare MySQL) ed effettuare un upgrade delle password:
Se si utilizza una versione di MySQL successiva alla 4.1, ma nel file di configurazione my.cnf è stata impostata la direttiva:
old-passwords=1allora verrà utilizzato comunque il vecchio schema di memorizzazione.
PHP, versione 5.3 e successive, per la connessione usa di default il driver mysqlnd che adotta il nuovo algoritmo di hash.
Risulta evidente come la combinazione di queste variabili possa portare alla generazione dell'errore sopra riportato.
Se si utilizza PHP 5.3 o superiore ed una versione di MySQL superiore alla 4.1 una soluzione può essere eliminare il flag old-passwords=1 da my.cnf (riavviare MySQL) ed effettuare un upgrade delle password:
mysql> SET PASSWORD FOR 'miouser'@'localhost' = PASSWORD('miapass');Se però è necessario mantenere la retrocompatibilità, magari perchè ci si connette al database anche da una versione di PHP vecchia, ci si può limitare a memorizzare la password di un prefissato utente con il nuovo algoritmo:
Query OK, 0 rows affected (0.00 sec)
mysql> SET @@session.old_passwords = 0;
Query OK, 0 rows affected (0.00 sec);mysql> SET PASSWORD FOR 'myuser'@'myhost' = PASSWORD('mypass');
Query OK, 1 rows affected (0.00 sec);