FEHLER 1698 (28000): Zugriff für Benutzer 'root' @ 'localhost' verweigert


382

Ich richte einen neuen Server ein und stoße weiterhin auf dieses Problem.

Wenn ich versuche, mich mit dem Root-Benutzer bei der MySQL-Datenbank anzumelden, wird folgende Fehlermeldung angezeigt:

FEHLER 1698 (28000): Zugriff für Benutzer 'root' @ 'localhost' verweigert

Es spielt keine Rolle, ob ich eine Verbindung über das Terminal (SSH), über PHPMyAdmin oder einen MySQL-Client, z. B. Navicat, herstelle. Sie alle scheitern.

Ich habe in der Tabelle mysql.user nachgesehen und Folgendes erhalten:

+------------------+-------------------+
| user             | host              |
+------------------+-------------------+
| root             | %                 |
| root             | 127.0.0.1         |
| amavisd          | localhost         |
| debian-sys-maint | localhost         |
| iredadmin        | localhost         |
| iredapd          | localhost         |
| mysql.sys        | localhost         |
| phpmyadmin       | localhost         |
| root             | localhost         |
| roundcube        | localhost         |
| vmail            | localhost         |
| vmailadmin       | localhost         |
| amavisd          | test4.folkmann.it |
| iredadmin        | test4.folkmann.it |
| iredapd          | test4.folkmann.it |
| roundcube        | test4.folkmann.it |
| vmail            | test4.folkmann.it |
| vmailadmin       | test4.folkmann.it |
+------------------+-------------------+

Wie Sie sehen können, sollte root Zugriff haben.

Der Server ist recht einfach, da ich seit einiger Zeit versucht habe, dies zu beheben.

Es läuft Ubuntu 16.04.1 LTS mit Apache, MySQL und PHP, so dass es Websites hosten kann, und iRedMail 0.9.5-1, damit es E-Mails hosten kann.

Die Anmeldung bei der MySQL-Datenbank funktioniert einwandfrei, bevor ich iRedMail installiere. Ich habe auch versucht, nur iRedMail zu installieren, aber dann root funktioniert auch nicht ...

Wenn mir jemand sagen könnte, wie ich mein MySQL-Anmeldeproblem behebe oder wie ich iRedMail zusätzlich zu einer vorhandenen MySQL-Installation installiere. Und ja, ich habe die Installationstipps ausprobiert und kann diese Variablen in den Konfigurationsdateien nicht finden.


Ich folgte diesem Link und die erste Option funktionierte für mich: askubuntu.com/questions/763336/…
Mikael Arhelger

3
sudo mysql_secure_installationist der einfachste Weg, das zu beheben
Sergey Ponomarev

Antworten:


1120

Einige Systeme wie Ubuntu, mysql verwenden standardmäßig das UNIX-Plugin auth_socket .

Grundsätzlich bedeutet dies: db_users, die es verwenden, werden von den Anmeldeinformationen des Systembenutzers "auth" . Sie können sehen, ob Ihr rootBenutzer so eingerichtet ist, indem Sie folgende Schritte ausführen:

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;

+------------------+-----------------------+
| User             | plugin                |
+------------------+-----------------------+
| root             | auth_socket           |
| mysql.sys        | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+

Wie Sie in der Abfrage sehen können, verwendet der rootBenutzer das auth_socketPlugin

Es gibt zwei Möglichkeiten, dies zu lösen:

  1. Sie können den Root-Benutzer so einstellen, dass er das mysql_native_passwordPlugin verwendet
  2. Sie können db_usermit Ihnen eine neue erstellen system_user(empfohlen)

Option 1:

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

Option 2: (Ersetzen Sie YOUR_SYSTEM_USER durch Ihren Benutzernamen)

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY '';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
mysql> UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

Denken Sie daran, dass Sie bei Verwendung von Option 2 eine Verbindung zu MySQL als Systembenutzername herstellen müssen ( mysql -u YOUR_SYSTEM_USER)

Hinweis: Auf einigen Systemen (z. B. Debian Stretch) heißt das Plugin 'auth_socket' 'unix_socket' , daher sollte der entsprechende SQL-Befehl lauten:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

Update: von @ andy Kommentar , dass mysql 8.xx scheint aktualisiert / ersetzt die auth_socketfür caching_sha2_passwordIch habe kein System - Setup mit mysql 8.xx haben dies zu testen, aber die oben genannten Schritte sollten Sie das Problem verstehen helfen. Hier ist die Antwort:

Eine Änderung seit MySQL 8.0.4 ist, dass das neue Standardauthentifizierungs-Plugin 'caching_sha2_password' ist. Das neue 'YOUR_SYSTEM_USER' verfügt über dieses Authentifizierungs-Plugin. Sie können sich jetzt mit "mysql -u YOUR_SYSTEM_USER -p" von der Bash-Shell aus anmelden und das Kennwort für diesen Benutzer an der Eingabeaufforderung eingeben. Der Schritt "UPDATE user SET plugin" ist nicht erforderlich. Informationen zum Standard-Auth-Plugin-Update 8.0.4 finden Sie unter https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/


5
Option 1 hat bei mir funktioniert. Aber dann musste ich auch rennen sudo gedit /etc/phpmyadmin/config.inc.php. Dann habe ich nach AllowNoPasswordbeiden Zeilen gesucht und sie kommentiert, die sie enthielten. Dann konnte ich mich ohne Passwort als root anmelden.
Joe

7
Option 2 funktioniert. Ich denke, es ist immer die beste Vorgehensweise, einen neuen Benutzer zu erstellen und root zu verlassen, um dort zu sein!
PasinduJay

2
das IDENTIFIED BY ''bisschen sollte wahrscheinlich seinIDENTIFIED BY 'YOUR_PASSWD'
YakovL

4
Endlich eine Antwort, die tatsächlich funktioniert !! Es gibt unzählige Antworten mit der Aufschrift "do mysqld_safe --skip-grant-tablesetc", und es hat nicht funktioniert.
Stewart

4
Ok, wie geht das, wenn sudo mysql -u root -pich nicht reinlasse?
Hrvoje T

173

Überprüfe hier:

Die NEUE Version von MYSQL macht es so.

Wenn im neuen my-sql das Passwort während der Installation leer bleibt, basiert es auf dem auth_socketPlugin.

Der richtige Weg ist, sich mit sudoBerechtigungen bei my-sql anzumelden .

$ sudo mysql -u root -p

Und dann aktualisieren Sie das Passwort mit:

$ ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';

Sobald dies erledigt ist, stop and startder MySQL-Server.

$  sudo service mysql stop
$  sudo service mysql start

Ausführliche Informationen finden Sie unter diesem Link .

Kommentieren Sie im Zweifelsfall.


4
Das hat bei mir mit Ubuntu 18 funktioniert. Vielen Dank.
Peter Drinnan

10
Arbeitete auch am Ubuntu 18.04
sgtkuncoro

2
Genau das, wonach ich gesucht habe. Danke :) Arbeitete an Ubuntu 18
Manthan_Admane

2
das funktionierte wie ein Zauber, lubuntu
19.04

3
Das funktioniert gut. Der Link ist nützlich.
Kjohri

9

Ich hatte dieses Problem auf einer Debian 8-VM, mit der ich über Putty auf meinem Windows 10-Desktop interagierte.

Ich habe die verschiedenen Vorschläge hier ausprobiert, aber nichts hat ganz funktioniert und ich führe MariaDB auf dem Debian-Host aus. Am Ende stellte ich fest, dass ich den Datenbankserver nicht im abgesicherten Modus starten konnte, dies aber nicht musste und die folgenden Befehle tatsächlich für mich funktionierten, dh einem neu erstellten MySql-Benutzer die Möglichkeit zu geben, sich beim MySql / MariaDB-Server anzumelden:

sudo service mysql restart
sudo mysql # logs in automatically into MariaDB
use mysql;
update user set plugin='' where user='your_user_name';
flush privileges;
exit;
sudo service mysql restart # restarts the mysql service

Wenn das oben Genannte für Sie nicht ganz funktioniert, befolgen Sie die in Zetacus Beitrag oben beschriebenen Schritte ( Zetacu ) und befolgen Sie dann meine Schritte.

Jetzt sollten Sie in der Lage sein, einen Remote-Terminal-Client zu verwenden und sich mit dem folgenden Befehl sicher bei MySQL anzumelden:

mysql -u your_user_name -p

* Geben Sie das Passwort ein, wenn Sie dazu aufgefordert werden


So einfach. Nun, nur der erste Befehl darf den zweiten nicht ausführen, also werde ich die Bearbeitung anpassen - bitte sehen Sie, ob ich Recht habe ...
Kokbira

7

Ich würde vorschlagen, die MySQL-Verbindung zu entfernen -

UPDATE-Dies ist für MySQL Version 5.5. Wenn Ihre Version anders ist, ändern Sie bitte die erste Zeile entsprechend

sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-5.5 mysql-client-core-5.5
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean

Und erneut installieren Aber diesmal legen Sie selbst ein Root-Passwort fest. Dies spart viel Aufwand.

sudo apt-get update
sudo apt-get install mysql-server

@ingernet vielleicht liegt das an einigen anderen Problemen, die Sie bei der erneuten Installation vernachlässigt haben
Eminem347

@PJBrunet möglicherweise, weil Ihre Version von MySQL anders ist
Eminem347

Fair genug, aber eine Allzwecklösung ist am besten.
PJ Brunet

6

Nach stundenlangem Kampf ohne Lösung funktionierte dies für mich. Dann fand ich ein Youtube-Video, in dem steht, dass die Passwortspalte jetzt authentication_string heißt. So konnte ich mein Passwort wie folgt ändern: Gehen Sie zuerst vom Terminal in MySQL

sudo mysql

Geben Sie dann in mysql was auch immer nach mysql> ein

mysql> use mysql
mysql> update user set authentication_string=PASSWORD("mypass") where user='root';
mysql> flush privileges;
mysql> quit;

Zu diesem Zeitpunkt befinden Sie sich außerhalb von MySQL und kehren zu Ihrem normalen Terminal zurück. Sie müssen mysql neu starten, damit dies wirksam wird. für diesen Typ Folgendes:

sudo service mysql restart

Siehe dieses Video - Link für ein besseres Verständnis


5

Schritt 1. sudo mysql -u root -p

Schritt 2. USE mysql;

Schritt 3. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';

Hier ist 'admin' dein neues Passwort, du kannst es ändern.

Schritt 4. exit

Vielen Dank. Du bist fertig.


5

Kein Sudo nötig

Die Datenbank wird mit zwei Konten mit allen Berechtigungen initialisiert: Das erste ist "root", auf das nicht zugegriffen werden kann, und das zweite mit Ihrem Benutzernamen (überprüfen Sie mit dem Befehl whoami).

Um den Zugriff auf das Root-Konto zu ermöglichen, müssen Sie sich mit Ihrem Benutzernamen anmelden

mysql -u $(whoami)

und ändern Sie das Passwort für root manuell

use mysql;
set password for 'root'@'localhost' = password('YOUR_ROOT_PASSWORD_HERE');
flush privileges;
quit

Loggen Sie sich als 'root' ein

mysql -u root -p

Sie sind die richtige Antwort für die aktuelle Version von MySQL, danke!
Hugo S

3

Erster Schritt: Gehen Sie zu /etc/phpmyadmin/config.inc.php und kommentieren Sie die Zeilen aus, in denen Sie AllowNoPassword finden. Zweiter Schritt: Melden Sie sich bei Ihrem MySQL-Standardkonto an

mysql -u root -p
use mysql;
update user set plugin="" where user='root';
flush privilege;

und das ist alles!


3

Das hat bei mir funktioniert:

mysql --user=root mysql
CREATE USER 'some_user'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'some_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

3

Das gleiche Problem hatte ich auch beim ersten Mal.

Jetzt ist es behoben:

Zuerst kopieren Sie die /etc/mysql/mysql.conf.d/mysqld.cnfDatei und fügen sie in ein/etc/mysql/my.cnf .

Sie können es auf Befehl tun:

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf

Lassen Sie uns nun das Passwort ruhen:

Verwenden Sie die folgenden Befehle in Ihrem Terminal:

sudo service mysql stop 
sudo service mysql start
sudo mysql -u root

Jetzt befinden Sie sich in der MySQL-Konsole.

Dann schreiben wir einige Abfragen, um unser Root-Passwort zurückzusetzen

USE mysql
update mysql.user set authentication_string=password('newpass') where user='root' and Host ='localhost';
update user set plugin="mysql_native_password"; 
flush privileges;
quit

Jetzt können wir putzen /etc/mysql/my.cng

Öffnen Sie die obige Datei in Ihrem Editor und entfernen Sie die gesamten Zeilen in der Datei.

Danach starten wir mysql neu:

sudo mysql service restart 

Verwenden wir jetzt MySQL mit dem neu erstellten Passwort:

sudo mysql -u root -p

Geben Sie abschließend Ihr neu erstelltes Passwort ein.


1
Gut gearbeitet ! aber deine Antwort muss aktualisiert werden !! /etc/mysql/my.cnf und nicht /etc/mysql/my.cng und für den Dienst starten Sie seinen sudo-Dienst neu
mysql restart

3

Nach stundenlanger Recherche habe ich hier meine Lösung gefunden.

Stoppen Sie MySQL

sudo service mysql stop

Erstellen Sie das MySQL-Dienstverzeichnis.

sudo mkdir /var/run/mysqld

Geben Sie dem MySQL-Benutzer die Berechtigung, in das Dienstverzeichnis zu schreiben.

sudo chown mysql: /var/run/mysqld

Starten Sie MySQL manuell, ohne Berechtigungsprüfungen oder Netzwerk.

sudo mysqld_safe --skip-grant-tables --skip-networking &

Melden Sie sich ohne Passwort an.

 mysql -uroot mysql

Kennwort aktualisieren

UPDATE mysql.user SET authentication_string=PASSWORD('YOURNEWPASSWORD'), plugin='mysql_native_password' WHERE User='root' AND Host='%';
EXIT;

Schalten Sie MySQL aus.

sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown

Starten Sie den MySQL-Dienst normal.

sudo service mysql start

Dies brachte mir eine MySQL-Eingabeaufforderung, wenn NICHTS ANDERES würde! Vielen Dank!
UserX

2

Sie möchten mit dem Root-Benutzer auf MySQL zugreifen, geben jedoch nicht das richtige Passwort für root an.

Wenn Sie ein neues Kennwort für root festlegen müssen, finden Sie auf der MySQL-Website eine ausführliche Dokumentation dazu: http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html

Ich werde den Prozess hier nicht zeigen, da die MySQL-Dokumentation über den obigen Link klar und präzise ist .


Vielen Dank für die Antwort, aber ich konnte sie nicht zum Laufen bringen. Deshalb habe ich mich entschieden, iRedMail stattdessen mit einer pgSQL-Datenbank zu installieren.
Folkmann

Roger Folkman! Gut zu wissen, dass Sie Ihr Problem auf irgendeine Weise gelöst haben.
Cristian Gonçalves

Links brechen. mysql.com hatte im Laufe der Jahre viele defekte Links. Sie sollten die relevanten Informationen hier kopieren und einfügen. Dies ist in Ordnung, solange Sie die Quelle zuordnen.
Gans

1

Betriebssystem: Ubuntu18.04

MySQL: 5.7

  1. skip-grant-tablesFügen Sie das zum Dateiende von mysqld.cnf hinzu

  2. cp die my.cnf

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf
  1. Setzen Sie das Passwort zurück
(base)   ~ sudo service mysql stop 
(base)   ~ sudo service mysql start
(base)   ~ mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed, 3 warnings
mysql> update mysql.user set authentication_string=password('newpass') where user='root' and Host ='localhost';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> update user set plugin="mysql_native_password"; 
Query OK, 0 rows affected (0.00 sec)
Rows matched: 4  Changed: 0  Warnings: 0

mysql>  flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye
  1. entferne das skip-grant-tablesaus my.cnf
(base)   ~ sudo emacs /etc/mysql/mysql.conf.d/mysqld.cnf 
(base)   ~ sudo emacs /etc/mysql/my.cnf                 
(base)   ~ sudo service mysql restart
  1. Öffne das MySQL
(base)   ~ mysql -uroot -ppassword 
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql> 
  1. Überprüfen Sie die Kennwortrichtlinie
mysql> select @@validate_password_policy;
+----------------------------+
| @@validate_password_policy |
+----------------------------+
| MEDIUM                     |
+----------------------------+
1 row in set (0.00 sec)


mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
6 rows in set (0.08 sec)!
  1. Ändern Sie die Konfiguration des validate_password
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.05 sec)

mysql> set global validate_password_mixed_case_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_number_count=3;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_special_char_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_length=3;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_dictionary_file    |       |
| validate_password_length             | 3     |
| validate_password_mixed_case_count   | 0     |
| validate_password_number_count       | 3     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 0     |
+--------------------------------------+-------+
6 rows in set (0.00 sec)

Beachten Sie, dass Sie wissen sollten, dass Sie Fehler durch was verursacht? validate_password_policy?

Sie sollten sich entscheiden, Ihr Kennwort zurückzusetzen, um die Richtlinie zu füllen oder die Richtlinie zu ändern.


0

Das ist mir auch passiert. Das Problem ist mit dem MySQL-Repo, das bereits mit der Linux-Distribution geliefert wird. Also, wenn Sie es einfach tun: $ sudo apt install mysql-server Es installiert MySQL von ihrem Standard-Repo, was dieses Problem verursacht. Um dies zu überwinden, müssen Sie das installierte MySQL deinstallieren $ sudo apt remove mysql* --purge --auto-remove

Laden Sie dann MySQL- Repo von der offiziellen MySQL- Website herunter. MySQL APT Repo Befolgen Sie die Dokumentation zum Hinzufügen und Installieren von Repo. Dies gibt kein Problem. Auch wie von @zetacu beantwortet, können Sie überprüfen, ob mysql root jetzt tatsächlich das Plugin mysql_native_password verwendet


0

in meinem Fall,

dev@Dev-007:~$ mysql -u root -p
Enter password: 
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Ich bin sicher, dass mein Passwort korrekt war, sonst wäre der Fehlercode ERROR 1045 (28000): Access denied for user

Also melde ich mich mit Sudo wieder an.

dev@Dev-007:~$ sudo mysql -u root -p

diesmal hat es bei mir geklappt. Siehe die Dokumente

und dann das Root-Passwort ändern,

mysql> alter user 'root'@'%' identified with mysql_native_password by 'me123';
Query OK, 0 rows affected (0.14 sec)

mysql> 

Starten Sie dann den Server mit neu sudo /etc/init.d/mysql restart

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.