Zugriff für Benutzer 'root' @ 'localhost' (mit Passwort: YES) nach Neuinstallation unter Ubuntu verweigert

124

Heute habe ich mich als root in Ubuntu 14.04.1 LTS ll angemeldet

und dann apt-get install mariadb-server(ohne sudo aber als root).

Mit habe mySQL -h localhost -u root --password=<PW>ich

Zugriff für Benutzer 'root' @ 'localhost' verweigert (mit Passwort: YES)

Mit mySQL -u root -pmir in die DB angemeldet und tat

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '<PW>';
FLUSH ALL PRIVILEGES;

Das hat aber nicht geholfen. Hast du eine Idee? Ich habe keine Antwort auf die ähnlichen Fragen gefunden.

SQL-Neuling
quelle
Haben Sie versucht, das Passwort für root zurückzusetzen?
Ozgur Bar

Antworten:

277

TL; DR: Um den Zugriff neuere Versionen von MySQL / MariaDB nach als Root - Benutzer, nachdem ein neuen installieren, müssen Sie in einem Root - Shell sein (dh sudo mysql -u root, oder mysql -u rootin einer Shell gestartet durch su -oder sudo -iersten)


Nachdem ich gerade das gleiche Upgrade unter Ubuntu durchgeführt hatte, hatte ich das gleiche Problem.

Was seltsam war, war das

sudo /usr/bin/mysql_secure_installation

Ich würde mein Passwort akzeptieren und es mir erlauben, es festzulegen, aber ich konnte mich nicht rootüber den mysqlClient anmelden

Ich musste mit Mariadb anfangen

sudo mysqld_safe --skip-grant-tables

Zugriff als root zu erhalten, während alle anderen Benutzer noch gut zugreifen konnten.

Beim Betrachten der mysql.userTabelle habe ich festgestellt, dass für root die pluginSpalte unix_socketauf "mysql_native_password" gesetzt ist, während für alle anderen Benutzer. Ein kurzer Blick auf diese Seite: https://mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin/ erklärt, dass der Unix-Socket die Anmeldung ermöglicht, indem uidder Prozess, auf dem der Client ausgeführt wird, mit dem des Benutzers im Internet abgeglichen wird mysql.userTabelle. Mit anderen Worten, um auf Mariadb zuzugreifen, müssen rootSie als root angemeldet sein.

Sicher genug, um meinen Mariadb-Daemon mit der erforderlichen Authentifizierung neu zu starten. Ich kann mich als Root anmelden

sudo mysql -u root -p

oder

sudo su -
mysql -u root -p

Nachdem ich dies getan hatte, überlegte ich, wie ich darauf zugreifen sollte, ohne das Sudo ausführen zu müssen. Dies ist nur eine Frage der Ausführung dieser MySQL-Abfragen

GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;

(Ersetzen <password>durch Ihr gewünschtes MySQL-Root-Passwort). Dadurch wurden Kennwortanmeldungen für den Root-Benutzer aktiviert.

Alternativ können Sie die MySQL-Abfrage ausführen:

UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin = 'unix_socket';
FLUSH PRIVILEGES;

Ändert das Root-Konto, um die Kennwortanmeldung zu verwenden, ohne das Kennwort zu ändern. Dies führt jedoch möglicherweise zu einer Installation von mysql / mariadb ohne Root-Kennwort.

Nach beiden müssen Sie mysql / mariadb neu starten:

sudo service mysql restart

Und voila hatte ich Zugriff von meinem persönlichen Account über mysql -u root -p

BITTE BEACHTEN SIE, DASS DIESE SICHERHEIT REDUZIERT Vermutlich haben sich die MariaDB-Entwickler aus gutem Grund für einen solchen Root-Zugriff entschieden.

Wenn sudo mysql -u root -pich darüber nachdenke, bin ich ziemlich froh, dass ich das tun muss, also wechsle ich zurück, aber ich dachte, ich würde meine Lösung veröffentlichen, da ich anderswo keine finden konnte.

DorianFM
quelle
7
"Um als root auf mariadb zugreifen zu können, muss man als root angemeldet sein." - Dieser Satz sollte oben in der Antwort stehen.
Philipp Ludwig
1
Warum führen Sie den GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>'; Befehl zweimal aus, bevor Sie Berechtigungen löschen?
Blairg23
4
Dies sollte an einem besser sichtbaren Ort sein, wie große rote Buchstaben während der Installation oder so ... Nur ein paar Stunden Leben damit verschwendet, einen Server
einzurichten
1
Übrigens, wenn Sie so faul sind wie ich, können Sie mitsudo service mysql restart
zeisi
1
Danke für den Tipp, großartig für Entwickler, aber wie kann man dies wieder auf das Original zurücksetzen?
Sam
42

In sauberem Ubuntu 16.04 LTS wurde die MariaDB- Root- Anmeldung für localhost vom Kennwortstil zum Sudo-Anmeldestil geändert ...

Also mach es einfach

sudo mysql -u root

Da wir uns mit einem Passwort anmelden möchten, erstellen Sie einen anderen Benutzer 'Benutzer'.

in der MariaDB-Konsole ... (Sie erhalten in der MariaDB-Konsole mit 'sudo mysql -u root')

use mysql
CREATE USER 'user'@'localhost' IDENTIFIED BY 'yourpassword';
\q

dann in der Bash-Shell-Eingabeaufforderung,

mysql-workbench

und Sie können sich mit 'user' mit 'yourpassword' auf localhost anmelden

Curycu
quelle
12

Versuchen Sie den Befehl

sudo mysql_secure_installation

Drücken Sie die Eingabetaste und weisen Sie ein neues Passwort für root in mysql / mariadb zu .

Wenn Sie einen Fehler wie erhalten

FEHLER 2002 (HY000): Über den Socket '/var/run/mysqld/mysqld.sock' kann keine Verbindung zum lokalen MySQL-Server hergestellt werden.

Aktivieren Sie den Dienst mit

service mysql start

jetzt, wenn Sie mit erneut eingeben

mysql -u root -p

Wenn Sie dem Problem folgen, geben Sie mit ein sudo suund mysql -u root -pwenden Sie jetzt Berechtigungen auf root an

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '<password>';

Dies hat mein Problem in MariaDB behoben .

Viel Glück

IsraelM17
quelle
9

vom Superuser akzeptierte Antwort :

sudo mysql -u root
use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;
Segelfisch009
quelle
3

Ich musste als root bei Ubuntu angemeldet sein, um auf Mariadb als root zugreifen zu können. Es kann etwas mit dem "Harden ..." zu tun haben, zu dem Sie bei der ersten Installation aufgefordert werden. So:

$ sudo su
[sudo] password for user: yourubunturootpassword
# mysql -r root -p
Enter password: yourmariadbrootpassword

und du bist dabei.

Joe C.
quelle
2

Der neue Befehl zum Löschen der Berechtigungen lautet:

FLUSH PRIVILEGES

Der alte Befehl FLUSH ALL PRIVILEGESfunktioniert nicht mehr.

Sie erhalten eine Fehlermeldung, die so aussieht:

MariaDB [(none)]> FLUSH ALL PRIVILEGES; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ALL PRIVILEGES' at line 1

Hoffe das hilft :)

Sylvain
quelle
0

Systeme wie Ubuntu bevorzugen das auth_socket- Plugin. Es wird versucht, sich zu authentifizieren, indem Sie Ihren Benutzernamen in der Datenbank und den Prozess vergleichen, der eine MySQL-Anfrage stellt. es wird hier beschrieben

Das Socket-Plugin prüft, ob der Socket-Benutzername (der Benutzername des Betriebssystems) mit dem vom Client-Programm angegebenen MySQL-Benutzernamen zum Server übereinstimmt, und lässt die Verbindung nur zu, wenn die Namen übereinstimmen.

Stattdessen möchten Sie möglicherweise mit dem mysql_native_password zurückkehren , für dessen Authentifizierung Benutzer / Kennwort erforderlich ist.

Über die Methode, um das zu erreichen, empfehle ich dies stattdessen.

nguyen
quelle