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

22

Ich arbeite an Xubuntu 15.04. Ich habe den MariaDB-Server bereits auf verschiedenen Systemen installiert und wurde bei der Installation immer nach einem root-Passwort gefragt. Diesmal kann ich mich jedoch nicht erinnern, nach dem Passwort gefragt worden zu sein. Wenn ich versuche, mich ohne ein Passwort (oder ein leeres Passwort) anzumelden, erhalte ich die Access denied for user 'root'@'localhost'Fehlermeldung. Ich habe versucht, das Paket vollständig zu deinstallieren

sudo apt-get remove mariadb-server
sudo apt-get purge mariadb-server

Bei der Neuinstallation wurde ich immer noch nicht nach dem root-Passwort gefragt.

Ich habe den mysqld --skip-grant-tablesAnsatz von MySQL ausprobiert, wie man den Zugriff für Benutzer 'root' @ 'localhost' verweigert . Ich kann das Passwort für den Root-Benutzer in der MySQL-Datenbank ändern - zumindest der Hash-Wert ändert sich - aber ich kann mich nach einem Neustart des MySQL-Servers immer noch nicht mit dem neuen Passwort anmelden. Ich bekomme immer noch den gleichen Fehler.

Der Benutzer debian-sys-maint existiert nicht. Ich kann es also nicht verwenden, um irgendetwas zu reparieren.

Irgendwelche Ideen, was ich sonst noch versuchen könnte?

d72b617c
quelle
Ein hilfreicher Thread mit derselben Frage zu StackOverflow: stackoverflow.com/questions/39281594/…
Kevin - Reinstate Monica

Antworten:

35

Sie müssen das Passwort zurücksetzen. also dafür

sudo mysql -u root
use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;
Abhinav bhardwaj
quelle
9
Die nicht offensichtliche "Magie" dieses Ansatzes besteht darin, dass sich der Benutzer des Root-Betriebssystems bei der Datenbank anmelden kann, ohne ein Kennwort angeben zu müssen, da dies plugin: auth_socketstandardmäßig aktiviert ist. Mit anderen Worten, es muss nicht mehr verwendet werden, --skip-grant-tableswie es in früheren MySQL-Versionen erforderlich gewesen wäre. (Auch technisch bedeutet diese Maßnahme nicht "Zurücksetzen des Passworts", sondern Deaktivieren eines Plugins.)
Ben Johnson,
1
+1, Kannst du erklären, warum?
A1Gard,
4
Dieser Ansatz wird später zu Problemen führen. Wenn Sie das Plug-In deaktivieren, wird der tägliche Cron-Job abgebrochen, da davon ausgegangen wird, dass er sich mit diesem Plug-In anmelden kann. Siehe meine Antwort für Details.
Colan
11

Die Idee mit dem neuen Setup ist, dass Sie überhaupt keine Passwörter verwenden sollten. Weitere Informationen finden Sie im UNIX_SOCKET-Authentifizierungs-Plugin .

Besonders relevant ist der Inhalt von /usr/share/doc/mariadb-server-10.0/README.Debian.gz unter Ubuntu 16.04:

Bei Neuinstallationen wird kein root-Passwort mehr gesetzt und es wird kein debian-sys-maint-Benutzer mehr angelegt. Stattdessen wird das MariaDB-Root-Konto so eingerichtet, dass es über den Unix-Socket authentifiziert wird. Bei jedem Aufruf von mysqld durch root oder über sudo wird dem Benutzer die mysqld-Eingabeaufforderung angezeigt.

Sie dürfen den mysql-Benutzer "root" niemals löschen. Obwohl kein Kennwort festgelegt ist, stellt das Plug-in unix_auth sicher, dass es nur lokal als Rootbenutzer ausgeführt werden kann.

Die Anmeldeinformationen in /etc/mysql/debian.cnf geben den Benutzer an, mit dem die Init-Skripte den Server anhalten und eine Protokollierung durchführen. Dies war der Benutzer debian-sys-maint, der nicht mehr als root verwendet wird und direkt ausgeführt werden kann.

Wenn Sie dieses Plug-In für root deaktivieren und ein Kennwort festlegen, wird der tägliche Cron-Job abgebrochen, da davon ausgegangen wird, dass er sich ohne Kennwort, jedoch mit dem Plug-In als root anmeldet.

Später heißt es:

Skripte sollten ausgeführt werden, wenn ein Benutzer über die erforderlichen Berechtigungen verfügt und über unix_socket identifiziert wird.

Es sieht also so aus, als sollten Passwörter nicht mehr von Anwendungen verwendet werden.

colan
quelle
1
Ich bin gerade auf das Problem gestoßen, das Sie beschreiben: "So if you disable that plug-in for root and set a password, the daily cron job will break as it's assuming it will log in as root without a password..."Die nicht offensichtliche Auswirkung der Aktivierung des UNIX_SOCKET-Authentifizierungs-Plugins (die jetzt die Standardeinstellung ist) ist, dass die Authentifizierung als Root-Datenbankbenutzer mit einem Kennwort deaktiviert ist. Nirgendwo auf mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin wird diese erhebliche Einschränkung erwähnt. Dementsprechend ist es nicht möglich, sich zB über SSH als root anzumelden.
Ben Johnson
2

Ich habe das Problem folgendermaßen gelöst:

Das Root-Passwort für MySQL (MariaDB) kann nicht zurückgesetzt werden

Man muss das Plugin-Feld von mysql.user für alle Roots in eine leere Zeichenkette ändern.

d72b617c
quelle
Dieses Problem wird hier beschrieben: percona.com/blog/2016/03/16/…
antonu17
3
Dieser Ansatz wird später zu Problemen führen. Wenn Sie das Plug-In deaktivieren, wird der tägliche Cron-Job abgebrochen, da davon ausgegangen wird, dass er sich mit diesem Plug-In anmelden kann. Siehe meine Antwort für Details.
Colan
1

Ich habe diesen Befehl ausgeführt, direkt nach der Installation:

$ sudo mysql_secure_installation

Im ersten Schritt ist das Passwort leer, drücken Sie einfach die Eingabetaste.

dxvargas
quelle
1
Es ist nicht leer, wenn bereits festgelegt, was mein vergessener Pw ist. Also kann ich mich immer noch nicht anmelden
Dave Everitt
0

Ich hatte das gleiche Problem mit einem Raapberry Pi mit Stretch. Meine Lösung bestand darin, einen neuen Benutzer mit allen Berechtigungen wie folgt zu erstellen:

sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root

MariaDB [(none)]> use mysql
MariaDB [mysql]> FLUSH PRIVILEGES;
GRANT ALL privileges ON mysql.* TO 'admin'@'localhost' with grant option;

Jetzt kann ich mich einloggen und uns den Benutzer "admin" als Superuser geben.

Ich hoffe das wird jemandem helfen.

trasba
quelle
0

Einfach benutzen sudo mysql -u root- fertig


Details: Neuere Versionen authentifizieren sich bei MySQL mithilfe der Systemauthentifizierung. Wenn Sie also auf das Betriebssystem zugreifen können, wird davon ausgegangen, dass Sie auch als Datenbank-Root angemeldet sind. Sie können dies durch Ausgabe bestätigen sudo mysql -u root -e "USE mysql; SELECT User, Host, plugin FROM mysql.user;". Sie sollten so etwas sehen (vielleicht mit auth_socketin anderen Distributionen)

+------+-----------+-------------+
| User | Host      | plugin      |
+------+-----------+-------------+
| root | localhost | unix_socket |
+------+-----------+-------------+
DeepSpace101
quelle
Ich bin als root angemeldet, aber für mich möchte dieser Befehl immer noch das MariaDB-root-Passwort ... das ich vergessen habe :-(
Dave Everitt