So sieht die Meldung aus
ERROR 1045 (28000): Access denied for user 'app'@'localhost' (using password: YES)Häufige Ursachen
- Das Passwort ist falsch oder wurde geändert, oder es enthält Zeichen, die Shell oder Konfigurationsdatei verändern.
- Der Benutzer existiert nur für einen anderen Host:
'app'@'%'ist nicht dasselbe wie'app'@'localhost'. - Bei MariaDB nutzt
rootdas Pluginunix_socket: Es klappt mitsudo mysql, aber nicht mit Passwort. - Die Anwendungskonfiguration enthält nach einer Migration oder Wiederherstellung noch die alten Zugangsdaten.
- Reverse-DNS oder
skip-name-resolveändern, welcher Host-Eintrag passt.
Prüfen
- Welche Benutzer und Hosts gibt es, mit welchem Plugin?
sudo mysql -e "SELECT user, host, plugin FROM mysql.user;" - Was darf dieser Benutzer?
sudo mysql -e "SHOW GRANTS FOR 'app'@'localhost';" - Anmeldung über TCP testen, das Passwort wird abgefragt
mysql -u app -p -h 127.0.0.1 -P 3306
Lösung
- Neues Passwort setzen:
ALTER USER 'app'@'localhost' IDENTIFIED BY 'neues-passwort';und in der Anwendung eintragen. - Den Benutzer für den Host anlegen, der sich wirklich verbindet:
CREATE USER 'app'@'192.0.2.10' IDENTIFIED BY '…';und danachGRANT … ON db.* TO …. - Für
rootauf MariaDB mitsudo mysqlstatt mit Passwort anmelden. - Zugangsdaten in der Konfiguration der Anwendung aktualisieren und die Anwendung neu starten.
- Passwörter mit Sonderzeichen in Anführungszeichen setzen oder eines ohne
$,!und#wählen.
Häufige Fragen
Ich habe das root-Passwort vergessen. Was jetzt?
Bei MariaDB klappt sudo mysql meist ohne Passwort. Sonst den Server kurz mit --skip-grant-tables neu starten, solange er aus dem Netz nicht erreichbar ist, ein neues Passwort setzen und normal neu starten.
Ist der Fehler derselbe wie 2002?
Nein. Bei 1045 hat der Server geantwortet und abgelehnt. Bei 2002 hat der Client gar keinen Server erreicht.