PDA

Visualizza la versione completa : [mySQL] soluzione al problema "Client does not support authentication protocol"


marketto
08-04-2005, 19:01
Le versioni 4.1 e superiori di mySQL usano un protocollo di autenticazione basato su un algoritmo di hashing della password che risulta essere incompatibile con le vecchie versioni dei client.
Se dopo aver eseguito l’upgrade del server ad una versione >= 4.1 si prova a connettersi allo stesso tramite un vecchio client il processo di autenticazione fallirŕ producendo il seguente messaggio d’errore:


shell> mysql
Client does not support authentication protocol requested by server; consider upgrading MySQL client

Per risolvere questo tipo di problema si possono usare le seguenti procedure:

Eseguire l’upgrade di tutti i client per usare la nuova libreria 4.1.1 o superiore;

se non č possibile eseguire l’upgrade dei client usare la funzione OLD_PASSWORD():


mysql> SET PASSWORD FOR
-> 'some_user'@'some_host' = OLD_PASSWORD('newpwd');

o alternativamente:


mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd')
-> WHERE Host = 'some_host' AND User = 'some_user';
mysql> FLUSH PRIVILEGES;


avviare il server mysqld con l’opzione "–old-passwords".


nota: l’estensione "mysql" di php non supporta il nuovo protocollo di autenticazione di mySQL >= 4.1. Se si desidera continuare ad usare php con l’estensione "mysql" č necessario adottare una delle procedure descritte precedentemente.
La nuova estensione "mysqli" invece č pienamente compatibile con il nuovo algoritmo di hashing; non risulta quindi necessario nessun tipo di intervento sulle password.


:ciauz:


pagina di riferimento:
http://dev.mysql.com/doc/mysql/en/old-client.html

maggiori info sul nuovo algoritmo di hashing di mySQL:
http://dev.mysql.com/doc/mysql/en/password-hashing.html

info su mysqli:
http://it2.php.net/mysqli

piero.mac
08-04-2005, 19:36
Grande marketto ... finalmente (forse) si riuscira' a installare mysql 4.1.x su php4... senza recriminare sui clienti vecchi... :fagiano:

thread messo tra i preferiti :zizi:

per dovere di cronaca esiste una ulteriore possibilita' che e' quella di aggiungere al fondo del file my.ini la stringa:

#Use old password encryption method (needed for 4.0 and older clients).
old-passwords

pero' in questo caso "tutti" i CLIENT nuovi o vecchi che siano continueranno ad usare l'hash a 16 digit invece del nuovo a 40.

:ciauz:

piero.mac
09-04-2005, 14:16
Si chiede la "beatificazione" di questo thread....

uppete... :D

Sgurbat
09-04-2005, 14:23
concordo anch'io all'epoca sbattei la testa due giorni per questo problema.

Proprongo venga messo in rilievo o tra le pillole.

gm
10-04-2005, 17:19
Aggiunta al thread in rilievo a furor di popolo :D

marketto
10-04-2005, 17:21
Originariamente inviato da gm
Aggiunta al thread in rilievo a furor di popolo :D
:stordita: :smack:


speriamo possa effettivamente servire :ciauz:

pap
19-04-2005, 15:30
Chiedo umilmente scusa per ignoranza ma quel

'some_user'@'some_host' = OLD_PASSWORD('newpwd');
Dove va inserito?

Vorrei provare questa soluzione (anche se non so se č giusta per il problema) in quanto quando mi connetto al database in remoto compare questo errore:
Access denied for user: 'nomeutente@nomehost' (Using password: YES)

Grazie.

piero.mac
19-04-2005, 15:43
Originariamente inviato da pap
Chiedo umilmente scusa per ignoranza ma quel

'some_user'@'some_host' = OLD_PASSWORD('newpwd');
Dove va inserito?

Vorrei provare questa soluzione (anche se non so se č giusta per il problema) in quanto quando mi connetto al database in remoto compare questo errore:
Access denied for user: 'nomeutente@nomehost' (Using password: YES)

Grazie.
Non direi sia il tuo caso se non ricevi la stringa di avviso che puoi vedere nel primo post di marketto... o nel titolo.

LostCore
28-04-2005, 15:23
Dunque....

a) come faccio ad avviare il server con –old-passwords?
b) Ho eseguito le seguenti query



mysql> SET PASSWORD FOR
-> lost@localhost = OLD_PASSWORD('lost');
Query OK, 0 rows affected (0.03 sec)




mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('lost')
-> WHERE Host='localhost' AND User='lost';
Query OK, 0 rows affected (0.03 sec)
Rows matched: 1 Changed: 0 Warnings: 0

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.06 sec)


Come mai mi dice 0 rows affected?
Eppure quell'utente c'e...se faccio una select me lo seleziona ç_ç

marketto
28-04-2005, 17:32
hai provato a connetterti dopo aver cambiato la password? :)

Loading