Altro
MySQL ERROR 1045 (28000): Accesso negato per l'utente 'bill'@'localhost' (usando la password: YES)
Prima di tutto lasciatemi dire che sono passato attraverso molte domande suggerite e non ho trovato alcuna risposta pertinente. Ecco cosa sto facendo.
Sono collegato alla mia istanza Amazon EC2. Posso accedere con MySQL root con questo comando:
mysql -u root -p
Poi ho creato un nuovo conto utente con host %
CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';
Ho concesso tutti i privilegi all'utente Bill:
grant all privileges on *.* to 'bill'@'%' with grant option;
Poi esco dall'utente root e provo ad accedere con bill:
mysql -u bill -p
inserito la password corretta e ottengo questo errore:
ERROR 1045 (28000): Accesso negato per l'utente 'bill'@'localhost' (usando la password: YES)
397
3
Quando hai corso
e hai ottenuto questo errore
mysqld si aspetta che tu ti connetta come
bill@localhost
.Provare a creare
bill@localhost
.Se vuoi connetterti da remoto, devi specificare il nome DNS, l'IP pubblico o 127.0.0.1 usando il TCP/IP:
Una volta effettuato il login, esegui questo
USER() riporta come hai tentato di autenticarti in MySQL
CURRENT_USER() riporta come sei stato autorizzato ad autenticarti in MySQL dalla tabella mysql.user
Questo vi darà una visione migliore di come e perché vi è stato permesso di autenticarvi in mysql. Perché questa vista è importante da sapere? Ha a che fare con il protocollo di ordinazione dell'autenticazione utente.
Ecco un esempio: Creerò un utente anonimo sul mio desktop MySQL
OK guardami mentre faccio il login come utente anonimo:
L'ordine di autenticazione è molto rigoroso. Controlla dal più specifico al meno. Ho scritto su questo stile di autenticazione nel DBA StackExchange.
Non dimenticate di chiamare esplicitamente il TCP come protocollo per il client mysql quando necessario.
Quando digitate
mysql -u root -p
, vi state connettendo al server mysql su un socket unix locale.Tuttavia il grant che hai dato,
'bill'@'%'
corrisponde solo alle connessioni TCP/IP, curiosamente.Se vuoi concedere l'accesso al socket unix locale, devi concedere i privilegi a 'bill'@'localhost' , che curiosamente non è lo stesso di 'bill'@'127.0.0.1'
Potresti anche connetterti usando TCP/IP con il client a riga di comando mysql, in modo che corrisponda ai privilegi che hai già concesso, ad esempio esegui
mysql -u root -p -h 192.168.1.123
o qualsiasi indirizzo IP locale che la tua scatola ha.Ok, non sono sicuro, ma probabilmente il colpevole è il file my.cnf nella directory di installazione di mysql. Commenta questa linea e il problema potrebbe essere risolto.