it-swarm.com.de

MySQL-Fehler: 'Zugriff für Benutzer' root '@' localhost 'verweigert

$ ./ mysqladmin -u root -p ' redigiert '
Passwort eingeben:

mysqladmin: connect to server at 'localhost' fehlgeschlagener Fehler:
'Zugriff verweigert für Benutzer' root '@' localhost '(mit Passwort: JA)'

Wie kann ich das beheben?

164
Harsh Trivedi
  1. Öffnen und bearbeiten Sie _/etc/my.cnf_ oder _/etc/mysql/my.cnf_, je nach Distribution.
  2. Fügen Sie _skip-grant-tables_ unter _[mysqld]_ hinzu.
  3. Starten Sie Mysql neu
  4. Sie sollten jetzt in der Lage sein, sich mit dem folgenden Befehl bei mysql anzumelden: _mysql -u root -p_
  5. Führen Sie _mysql> flush privileges;_ aus.
  6. Neues Passwort setzen mit ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
  7. Gehen Sie zurück zu /etc/my.cnf und remove/comment skip-grant-tables
  8. Starten Sie Mysql neu
  9. Jetzt können Sie sich mit dem neuen Passwort anmelden _mysql -u root -p_
241

Alle Lösungen, die ich fand, waren viel komplexer als nötig und keine funktionierte für mich. Hier ist die Lösung, die mein Problem gelöst hat. Es ist nicht erforderlich, mysqld neu zu starten oder mit speziellen Berechtigungen zu starten.

Sudo mysql

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

Mit einer einzigen Abfrage ändern wir das auth_plugin in mysql_native_password und setzen das root-Passwort an root (Sie können es in der Abfrage jederzeit ändern)

Jetzt sollten Sie sich mit root anmelden können. Weitere Informationen finden Sie in MySQL-Dokumentation

(beenden Sie die MySQL-Konsole mit Strg + D oder durch Eingabe von exit )

397
user1878906

Ich habe viele Schritte unternommen, um dieses Problem zu beheben. Es gibt so viele Quellen für mögliche Lösungen für dieses Problem, dass es schwierig ist, den Sinn aus dem Unsinn herauszufiltern. Ich habe endlich eine gute Lösung gefunden hier :

Schritt 1: Identifizieren Sie die Datenbankversion

$ mysql --version

Mit MySQL sehen Sie einige Ausgaben wie diese:

$ mysql  Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using  EditLine wrapper

Oder Ausgabe wie folgt für MariaDB:

mysql  Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1

Notieren Sie sich, welche Datenbank und welche Version Sie ausführen, da Sie diese später verwenden werden. Als Nächstes müssen Sie die Datenbank stoppen, damit Sie manuell darauf zugreifen können.

Schritt 2: Anhalten des Datenbankservers

Um das root-Passwort zu ändern, müssen Sie den Datenbankserver vorher herunterfahren.

Das können Sie für MySQL tun mit:

$ Sudo systemctl stop mysql

Und für MariaDB mit:

$ Sudo systemctl stop mariadb

Schritt 3: Neustarten des Datenbankservers ohne Berechtigungsprüfung

Wenn Sie MySQL und MariaDB ausführen, ohne Informationen zu Benutzerberechtigungen zu laden, können Sie mit Root-Berechtigungen auf die Datenbankbefehlszeile zugreifen, ohne ein Kennwort anzugeben. Auf diese Weise können Sie auf die Datenbank zugreifen, ohne es zu wissen.

Zu diesem Zweck müssen Sie verhindern, dass die Datenbank die Berechtigungstabellen lädt, in denen Informationen zu Benutzerrechten gespeichert sind. Da dies ein Sicherheitsrisiko darstellt, sollten Sie auch das Netzwerk überspringen, um zu verhindern, dass andere Clients eine Verbindung herstellen.

Starten Sie die Datenbank, ohne die Grant-Tabellen zu laden oder das Netzwerk zu aktivieren:

$ Sudo mysqld_safe --skip-grant-tables --skip-networking &

Das kaufmännische Und am Ende dieses Befehls bewirkt, dass dieser Prozess im Hintergrund ausgeführt wird, sodass Sie Ihr Terminal weiterhin verwenden können.

Jetzt können Sie sich als Root-Benutzer mit der Datenbank verbinden, der nicht nach einem Passwort fragen sollte.

$ mysql -u root

Stattdessen wird sofort eine Shell-Eingabeaufforderung für die Datenbank angezeigt.

MySQL-Eingabeaufforderung

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

MariaDB-Eingabeaufforderung

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Jetzt, da Sie Root-Zugriff haben, können Sie das Root-Passwort ändern.

Schritt 4: Ändern des Root-Passworts

mysql> FLUSH PRIVILEGES;

Jetzt können wir das root-Passwort tatsächlich ändern.

Für MySQL 5.7.6 und neuer sowie MariaDB 10.1.20 und neuer , benutze den folgenden Befehl:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

Für MySQL 5.7.5 und älter sowie MariaDB 10.1.20 und älter , verwenden:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');

Stellen Sie sicher, dass new_password durch das neue Passwort Ihrer Wahl ersetzt wird.

Hinweis: Wenn der Befehl ALTER USER nicht funktioniert, deutet dies normalerweise auf ein größeres Problem hin. Sie können jedoch versuchen, UPDATE ... SET stattdessen das root-Passwort zurückzusetzen.

[WICHTIG] Dies ist die spezifische Zeile, die mein spezielles Problem behoben hat:

mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';

Denken Sie daran, die Grant-Tabellen danach neu zu laden.

In beiden Fällen sollte eine Bestätigung angezeigt werden, dass der Befehl erfolgreich ausgeführt wurde.

Query OK, 0 rows affected (0.00 sec)

Das Kennwort wurde geändert, sodass Sie jetzt die manuelle Instanz des Datenbankservers stoppen und wie zuvor neu starten können.

Schritt 5: Starten Sie den Datenbankserver normal neu

Das Tutorial enthält einige weitere Schritte zum Neustart der Datenbank, aber das einzige, was ich verwendet habe, war Folgendes:

Verwenden Sie für MySQL: $ Sudo systemctl starten Sie mysql

Verwenden Sie für MariaDB:

$ Sudo systemctl start mariadb

Jetzt können Sie bestätigen, dass das neue Passwort korrekt angewendet wurde, indem Sie Folgendes ausführen:

$ mysql -u root -p

Der Befehl sollte nun zur Eingabe des neu zugewiesenen Passworts auffordern. Geben Sie es ein, und Sie sollten wie erwartet Zugriff auf die Datenbank-Eingabeaufforderung erhalten.

Fazit

Sie haben nun Administratorzugriff auf den MySQL- oder MariaDB-Server, der wiederhergestellt wurde. Stellen Sie sicher, dass das von Ihnen gewählte neue Root-Passwort sicher und sicher ist, und bewahren Sie es an einem sicheren Ort auf.

36
Blairg23

Für Ubuntu/Debian-Benutzer

Führen Sie Folgendes aus, um eine Verbindung als root (ohne Kennwort) herzustellen

Sudo /usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf

Wenn Sie nicht jedes Mal --defaults-file hinzufügen möchten, wenn Sie eine Verbindung als root herstellen möchten, können Sie /etc/mysql/debian.cnf in Ihr Ausgangsverzeichnis kopieren:

Sudo cp /etc/mysql/debian.cnf ~/.my.cnf

und dann:

Sudo mysql
20
Fab

Für neue Linux-Benutzer könnte dies eine entmutigende Aufgabe sein. Lassen Sie mich dies mit MySQL 8 aktualisieren (die aktuellste Version ist 8.0.12, Stand 12.09.2018).

  1. Öffnen Sie die Konfigurationsdatei "mysqld.cnf" unter "/etc/mysql/mysql.conf.d/".
  2. Fügen Sie überspringen-gewähren-Tabellen in die nächste Zeile von [mysql] Text ein und speichern Sie.
  3. Starten Sie den mysql-Dienst als "Sudo service mysql restart" neu. Jetzt ist Ihr MySQL frei von jeglicher Authentifizierung.
  4. Stellen Sie eine Verbindung zum Mysql-Client (auch als Mysql-Shell bekannt) als Mysql -u root -p her. Ab sofort ist kein Passwort einzugeben.
  5. führen Sie den Befehl sql Flush-Berechtigungen; aus
  6. Setzen Sie das Passwort jetzt zurück als ALTER USER 'root' @ 'localhost' IDENTIFIED BY 'MyNewPassword';
  7. Kommen wir nun zum normalen Zustand zurück. Entfernen Sie die Zeile "Skip-Grant-Tables" aus "mysqld.cnf" und starten Sie den Dienst neu.

Das ist es.

12
Amit Kr

Nachdem ich alle anderen Antworten ausprobiert hatte, funktionierte dies schließlich für mich

Sudo mysql -- It does not ask me for any password

-- Then in MariaDB/MySQL console:
update mysql.user set plugin = 'mysql_native_password' where User='root';
FLUSH PRIVILEGES;
exit;

Ich habe die Antwort in diesem Beitrag gefunden: https://medium.com/@chiragpatel_52497/solved-error-access-denied-for-user-root-localhost-of-mysql-programming-school-6e3611838d06 =

4
Pico12

In Ihrer MySQL-Workbench können Sie in der linken Seitenleiste unter Verwaltung "Benutzer und Berechtigungen" auswählen, unter Benutzerkonten auf root klicken und im rechten Bereich auf die Registerkarte "Kontolimits" klicken, um die maximale Anzahl an Abfragen, Updates usw. zu erhöhen Klicken Sie dann auf die Registerkarte "Administrative Rollen" und aktivieren Sie die Kontrollkästchen, um dem Konto Zugriff zu gewähren. Ich hoffe, das hilft!

4
Colleen Purcell

Ich habe dies getan, um mein root-Passwort bei der Ersteinrichtung von MySQL in OSx festzulegen. Öffnen Sie ein Terminal.

Sudo sh -c 'echo /usr/local/mysql/bin > /etc/paths.d/mysql'

Schließen Sie das Terminal und öffnen Sie ein neues Terminal. Die folgenden Schritte werden unter Linux ausgeführt, um das root-Passwort festzulegen.

Sudo /usr/local/mysql/support-files/mysql.server stop
Sudo mysqld_safe --skip-grant-tables

(Sudo mysqld_safe --skip-grant-tables: Das hat beim ersten Mal nicht funktioniert. Aber beim zweiten Versuch war es ein Erfolg.)

Dann melden Sie sich bei MySQL an

mysql -u root

FLUSH PRIVILEGES;

Ändern Sie nun das Passwort:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';

Starten Sie MySQL neu:

Sudo /usr/local/mysql/support-files/mysql.server stop
Sudo /usr/local/mysql/support-files/mysql.server start
3
Sadee

Dies kann vorkommen, wenn Sie nicht über ausreichende Berechtigungen verfügen. Geben Sie su ein, geben Sie das root-Passwort ein und versuchen Sie es erneut.

0
vitaly goji

In meinem Fall unter Debian 10 ist der Fehler

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

wurde gelöst von (GOOD WAY)

Sudo mysql -u root -p mysql

SCHLECHTER WEG:

mysql -u root -p mysql
0
klor

Wenn Sie wie ich sind und alle obigen Vorschläge fehlgeschlagen sind, deinstallieren Sie alle Versionen von mysql auf Ihrem Computer und suchen Sie mit dem Befehl Sudo find / -name "mysql" und rm -rf nach allen Dateien oder Verzeichnissen mit mysql Name angehängt (Sie sollten Dateien überspringen, die sich auf Programmiersprachenbibliotheken beziehen). Installieren Sie jetzt eine neue Version von MySQL und genießen Sie. NB: Sie werden alle Ihre Daten verlieren, also wägen Sie zuerst Ihre Optionen ab.

0
Michael Ogala