Come appare il messaggio
ERROR 1045 (28000): Access denied for user 'app'@'localhost' (using password: YES)Cause frequenti
- La password è errata o è stata cambiata, oppure contiene caratteri che la shell o un file di configurazione alterano.
- L'utente esiste solo per un altro host:
'app'@'%'non è la stessa cosa di'app'@'localhost'. - Su MariaDB l'account
rootusa il pluginunix_socket: funziona consudo mysqlma non con la password. - La configurazione dell'applicazione contiene ancora le vecchie credenziali dopo una migrazione o un ripristino.
- Il DNS inverso o
skip-name-resolvecambiano quale voce host corrisponde.
Verifica
- Quali utenti e host esistono, e con quale plugin?
sudo mysql -e "SELECT user, host, plugin FROM mysql.user;" - Cosa può fare questo utente?
sudo mysql -e "SHOW GRANTS FOR 'app'@'localhost';" - Prova l'accesso via TCP, la password viene chiesta
mysql -u app -p -h 127.0.0.1 -P 3306
Soluzione
- Imposta una nuova password:
ALTER USER 'app'@'localhost' IDENTIFIED BY 'nuova-password';e usala nell'applicazione. - Crea l'utente per l'host che si collega davvero:
CREATE USER 'app'@'192.0.2.10' IDENTIFIED BY '…';e poiGRANT … ON db.* TO …. - Per
rootsu MariaDB accedi consudo mysqlinvece che con la password. - Aggiorna le credenziali nella configurazione dell'applicazione e riavviala.
- Metti tra virgolette le password con caratteri speciali, oppure scegline una senza
$,!e#.
Domande frequenti
Ho dimenticato la password di root. Cosa faccio?
Su MariaDB sudo mysql di solito funziona senza password. Altrimenti riavvia brevemente il server con --skip-grant-tables finché non è raggiungibile dalla rete, imposta una nuova password e riavvia normalmente.
È lo stesso errore del 2002?
No. Con 1045 il server ha risposto e ha detto no. Con il 2002 il client non ha raggiunto alcun server.