Frage kann nicht als mysql Benutzer root von normalen Benutzerkonto in Ubuntu 16.04 anmelden


Ich habe gerade Ubuntu 16.04 LTS zusammen mit den Paketen installiert php, mariadb und nginx. ich rannte mysql_secure_installation und änderte das root-Passwort.

Jetzt wenn ich versuche mich anzumelden mysql mit dem root-konto während ich in Ubuntu als normales benutzerkonto eingeloggt bin bekomme ich den zugriff verweigert.

Wenn ich mich anmelde sudo mysqlmysql fragt mich nicht einmal passwort. Wenn ich renne mysql_secure_installtion Ich sehe, dass alte Einstellungen nie dauerhaft eingestellt wurden.

Was mache ich falsch?


125
2018-05-02 11:45


Ursprung




Antworten:


Ich habe kürzlich mein Ubuntu 15.04 auf 16.04 aktualisiert und das hat für mich funktioniert:

  1. Verbinden Sie sich zunächst mit sudo mysql

    sudo mysql -u root
    
  2. Überprüfen Sie Ihre Konten in Ihrer Datenbank

    SELECT User,Host FROM mysql.user;
    +------------------+-----------+
    | User             | Host      |
    +------------------+-----------+
    | admin            | localhost |
    | debian-sys-maint | localhost |
    | magento_user     | localhost |
    | mysql.sys        | localhost |
    | root             | localhost |
    
  3. Löschen Sie das aktuelle root @ localhost-Konto

    mysql> DROP USER 'root'@'localhost';
    Query OK, 0 rows affected (0,00 sec)
    
  4. Erstellen Sie Ihren Benutzer neu

    mysql> CREATE USER 'root'@'%' IDENTIFIED BY '';
    Query OK, 0 rows affected (0,00 sec)
    
  5. Erteilen Sie Ihrem Benutzer Berechtigungen (vergessen Sie nicht, Berechtigungen zu löschen)

    mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
    Query OK, 0 rows affected (0,00 sec)
    
    mysql> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0,01 sec)
    
  6. Verlasse MySQL und versuche, dich ohne sudo wieder zu verbinden.

Ich hoffe, das wird jemandem helfen :)


232
2018-06-08 09:04



Das war die einzige Sache, die für mich funktionierte, weiß jemand genau, was mit dem root Benutzer geschah, wenn Sie mysql-server auf 16.04 installieren? - Ruggi
Halte es, nicht % bedeutet, dass Sie von überall ... remote verbinden können? - Stevie G
Sie können die Zeile ändern in: CREATE USER 'root' @ 'localhost' IDENTIFIED BY ''; - vladnev
Für die Sicherheitsaspekte: Das ungesicherte root @ localhost mysql-Verbindungsmuster ist ein fester Bestandteil der lokalen Entwicklung aber sollte absolut nirgendwo sonst erscheinen. - charneykaye
Die grant-Anweisung für den neuen root-Benutzer gibt hier nicht "with grant" an root, so dass root es nicht gewähren kann, ohne dass es danach ausgeführt wird: dba.stackexchange.com/a/62046/115679  Bitte ändern Sie die Grant-Anweisung zu grant all privileges on *.* to 'root'@'localhost' with grant option; - Loren


Wenn Sie 5.7 installieren und kein Passwort für die root Benutzer, es   werde das benutzen auth_socket Plugin. Das Plugin ist egal und   benötigt kein Passwort. Es prüft nur, ob der Benutzer eine Verbindung herstellt   mit einem UNIX-Socket und vergleicht dann den Benutzernamen.

Genommen von Benutzerpasswort in MySQL ändern 5.7 Mit "plugin: auth_socket"

Also um das zu ändern plugin zurück zu mysql_native_password:

  1. Einloggen mit sudo:

    sudo mysql -u root
    
  2. Ändere das plugin und setze ein Passwort mit einem einzigen Befehl:

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

Natürlich können Sie auch den obigen Befehl verwenden, um ein leeres Passwort festzulegen.

Nur für das Protokoll, (und MariaDB < 10.2 Benutzer) gibt es auch eine andere Möglichkeit, nur die plugin ohne ein Passwort anzugeben (leer lassen):

update mysql.user set plugin = 'mysql_native_password' where User='root';
// to change the password too (credits goes to Pothi Kalimuthu)
// UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root';
FLUSH PRIVILEGES;

81
2017-07-23 07:46



Danke, aus irgendeinem Grund wurde dies nach einem apt-get Upgrade automatisch eingestellt, denke ich ... - Tominator
Dies war das Problem nach einem Update von Ubuntu 14.04 bis 16.04 und ich wurde aus meiner Datenbank ausgesperrt ... - Reflic
Außerdem mag ich diese Antwort mehr - es ist viel weniger destruktiv ;-) - benzkji
Für MariaDB <10.2, Plugin mit dem Passwort zu ändern, hier ist die Abfrage: UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root'; FLUSH PRIVILEGES; Quelle: stackoverflow.com/a/41537019/1004587 - Pothi Kalimuthu
10x @PothiKalimuthu, nur die Antwort aktualisiert. - Todor


Das Problem hier ist, dass wenn MariaDB oder MySQL installiert / aktualisiert werden (besonders wenn root irgendwann ohne Passwort gesetzt wird), dann ist das Passwort in der Tabelle Benutzer tatsächlich leer (oder ignoriert) und die Anmeldung hängt vom entsprechenden Systembenutzer ab an einen MySQL-Benutzer. Sie können dies wie folgt testen, indem Sie zum Systemstamm wechseln und dann Folgendes eingeben:

mysql -uroot -p

Geben Sie dann entweder kein Passwort oder die falsch Passwort. Sie werden wahrscheinlich hereingelassen werden. (Sie können sich sogar einfach vom Unix-Root aus anmelden.) # mysql da das Passwort irrelevant ist und der Benutzer definiert ist).

Also was passiert gerade? Nun, wenn Sie sich als root einloggen und folgendes tun:

select User,host,plugin from mysql.user; 
+----------------+-----------+-----------------------+
| User           | host      | plugin                |
+----------------+-----------+-----------------------+
| root           | localhost | auth_socket           |
+----------------+-----------+-----------------------+

Du wirst es bemerken auth_socket (was lesen kann unix_socket auf MariaDB). Diese Sockets ignorieren Kennwörter und erlauben dem entsprechenden Unix-Benutzer ohne eine Passwortüberprüfung Deshalb können Sie sich mit anmelden Wurzel aber nicht mit einem anderen Benutzer.

Also ist die Lösung, die Benutzer zu aktualisieren, die nicht zu verwenden auth_socket/unix_socket und ein Passwort richtig einstellen.

Auf MariaDB (<10.2), das ab 2017 auf der Ubuntu-Version 16 ist, sollte dies genügen:

UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';

(Es ist möglich, dass das Setzen des Plugins auf leer funktioniert. YMMV. Ich habe das nicht versucht.)

UPDATE mysql.user SET plugin = '', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';

Andernfalls:

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

Dann

FLUSH PRIVILEGES;

Für die Aufzeichnung, die Lösung, die das Löschen des Benutzers und die Neuerstellung mit '%' beinhaltet, hat mich völlig aus der Datenbank ausgeschlossen und kann andere Probleme verursachen, wenn Sie die nicht erhalten grantAnweisung genau richtig - einfacher, einfach die Wurzel zu aktualisieren, die Sie bereits haben.

Meiner Erfahrung nach tritt das Problem nur beim Benutzer root auf, da andere Benutzer manuell hinzugefügt werden und nicht Teil einer Erstinstallation / Aktualisierung sind.


7
2017-10-14 04:18



Fanden Sie das perfekt funktioniert. Wundert mich aber warum man das root Passwort mit ändert mysql_secure_installation hatte nicht den gleichen Effekt. Wo speichert es das neue Passwort? - Mausy5043


Versuche ein neues mysql-Konto zu erstellen, für mich hat es funktioniert (mysql 5.7.12):

  1. Melden Sie sich als sudo an:

    sudo mysql -uroot
    
  2. Erstelle einen neuen Benutzer und gewähre ihm Privilegien (kein Passwort):

    CREATE USER 'admin'@'localhost' IDENTIFIED BY '';
    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';
    
  3. Als neuer Benutzer anmelden:

    mysql -uadmin
    

2
2018-05-28 09:37



Es half! Vielen Dank. - Ejaz


Wenn Sie MySQL / MariaDB aus dem Basisrepository installiert haben, können sich Benutzer nicht von ihren Unix-Logins als MySQL-Root-Benutzer bei MySQL anmelden (falls zutreffend) Sudo Zugriff)

  1. Loggen Sie sich in MySQL root shell ein:

    $ sudo mysql -u root -p
    
  2. Ausführen unter Abfragen:

    use mysql;
    update user set plugin='mysql_native_password' where user='root';
    flush privileges; 
    quit;
    
  3. Öffne eine neue Shell und dann:

    $ mysql -u root -p
    

Quelle:

http://www.itzgeek.com/how-tos/linux/debian/how-to-install-mariadb-on-debian-9.html


2
2017-12-02 08:31



Das hat für mich funktioniert. Vielen Dank - Junaid Qadir Shekhanzai
Als ich das getan habe, konnte ich mysql nicht mehr als root sudo. Ich musste zuerst su und dann konnte ich mich in mysql als root einloggen. Also habe ich es wieder in auth_socket geändert. - untill
Einzelner Befehl: mysql -u root -p -e "use mysql;update user set plugin='mysql_native_password' where user='root';flush privileges;" - Chris Stryczynski


Probieren Sie diesen Code zuerst aus,

echo "CREATE USER 'root'@'localhost' IDENTIFIED BY 'root';" > your_init_file.sql
echo "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;" >> your_init_file.sql 
echo "FLUSH PRIVILEGES;" >> your_init_file.sql

und dann,

killall mysqld
mysqld_safe --init-file=$PWD/your_init_file.sql

dann drücken Ctrl+Z und geben Sie ein: bg Um den Prozess vom Vordergrund in den Hintergrund zu führen, überprüfen Sie Ihren Zugriff durch:

mysql -u root -proot
mysql> show grants;

1
2018-05-28 09:47





Wenn Sie nur den mysql-Befehl unter root-Benutzer ausführen, erhalten Sie Zugang, ohne nach einem Passwort gefragt zu haben, da die Socket-Authentifizierung für root @ localhost aktiviert ist. .

Die einzige Möglichkeit, ein Kennwort festzulegen, besteht darin, auf die native Authentifizierung umzuschalten:

$ sudo mysql

mysql> ALTER BENUTZER 'root' @ 'localhost' IDENTIFIED MIT   mysql_native_password BY "Test";


1
2017-07-26 15:23





Ich musste zwei Dinge tun (dank @Todor und @Loremhipsum):

update mysql.user set plugin = 'mysql_native_password' where User='root';
grant all privileges on *.* to 'root'@'localhost';

und dann:

FLUSH PRIVILEGES;

Ich würde nicht empfehlen, den Benutzer fallen zu lassen root.


1
2018-01-03 16:43





Ich habe einige Provisioning-Skripte angepasst, die ich für die Verwendung von MariaDB erstellt habe, und bin genau auf dieses Problem eingegangen. Hier finden Sie viele Informationen Gazzers Antwort wirklich Nullen in der Ausgabe; es läuft alles auf die auth_socket/unix_socket Rahmen.

Bei der Verwendung von MariaDB 5.5 (unter Ubuntu 14.04) und MariaDB 10 unter (Ubuntu 16.04) hat die Anmeldung bei MySQL und die Ausführung dieses Befehls die Dinge sofort geklärt:

UPDATE mysql.user SET plugin='' WHERE User='root';
FLUSH PRIVILEGES;

Die anderen Antworten - einschließlich die höchste Wahl als Antwort von Loremhiesum- ermutigen Sie schlechte Praktiken, indem Sie einen Benutzer löschen und dann neu erstellen. Für mich ist das eine ziemlich radikale Lösung. Die beste / einfachste Lösung, um die plugin Wert, flush Privilegien und weiter mit dem Leben.


0
2017-10-20 00:54





Ich hatte das gleiche Problem und habe folgendes behoben:

mysql_upgrade --force

-1
2018-05-03 06:48



Leider hat das nicht funktioniert. Ich installiere Ubuntu neu. - codescope
Ich habe gerade Ubuntu 16.04 neu installiert und Mariad-Server installiert. Nach der Installation habe ich mysql_secure_installation ausgeführt und ein Passwort vergeben. Nachdem ich die restlichen Schritte in mysql_secure_installation durchlaufen habe, habe ich es erneut ausgeführt und es sieht so aus, als ob die Änderungen nicht gespeichert werden. Ich kann mich immer noch nicht von meinem normalen Benutzerkonto aus anmelden. Könnte es ein Fehler sein? - codescope
Das wird niemals helfen. Das Problem hat nichts mit der eigentlichen Installation der MariaDB-Binärdatei zu tun, sondern eher mit dem Benutzer root mit eingestellt werden plugin Einstellungen, die nicht Standard sind. Der einzige Randfall, bei dem ein Upgrade der Datenbank in einem Fall wie diesem helfen könnte, ist, wenn der mysql_upgrade Prozess selbst ist verantwortlich für die plugin Einstellung, die ich bezweifle. - JakeGould