kann sich nicht als mysql user root vom normalen Benutzerkonto in ubuntu 16.04 anmelden

123

Ich habe gerade Ubuntu 16.04 LTS zusammen mit den Paketen php , mariadb und nginx installiert. Ich habe mysql_secure_installation ausgeführt und das root-Passwort geändert.

Wenn ich nun versuche, mich in mysql mit dem root-Account einzuloggen, während ich als normales Benutzerkonto bei Ubuntu angemeldet bin, bekomme ich den Zugriff verweigert.

Wenn ich mich mit sudo mysql anmelde, fragt mysql nicht einmal nach dem Passwort. Wenn ich mysql_secure_installtion starte, sehe ich, dass alte Einstellungen nie dauerhaft gesetzt wurden.

Was mache ich falsch?

    
codescope 02.05.2016, 13:45
quelle

10 Antworten

222

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

  1. Verbinden Sie sich zuerst mit sudo mysql

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

    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:)

    
Loremhipsum 08.06.2016 11:04
quelle
78
  

Wenn Sie 5.7 installieren und dem root -Benutzer kein Passwort zur Verfügung stellen, ist dies der Fall   wird das auth_socket Plugin benutzen. 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.

Entnommen aus Ändern des Benutzerpassworts in MySQL 5.7 Mit "plugin: auth_socket "

Also, um die plugin zurück zu mysql_native_password :

zu ändern
  1. Einloggen mit sudo:

    sudo mysql -u root
    
  2. Ändere 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 den Datensatz, (und MariaDB < 10.2 Benutzer) gibt es auch eine andere Möglichkeit, nur die plugin zu ändern, ohne ein Passwort anzugeben (es 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;
    
Todor 23.07.2016 09:46
quelle
6

Das Problem hier ist, dass wenn MariaDB oder MySQL installiert / aktualisiert werden (besonders wenn root irgendwann ohne Passwort gesetzt ist), dann ist das Passwort in der Users Tabelle tatsächlich leer (oder ignoriert) und die Anmeldung hängt von der ab Systembenutzer, der einem MySQL-Benutzer entspricht. 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 das falsche Passwort ein. Wahrscheinlich werden Sie hereingelassen. (Sie können sich sogar vom UNIX-Stamm aus einloggen, indem Sie einfach # mysql eingeben, da das Passwort irrelevant ist und der Benutzer definiert ist.)

Also, was ist los? Nun, wenn Sie sich als root einloggen und folgendes tun:

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

Sie werden auth_socket notieren (was unix_socket auf MariaDB lesen kann). Diese Sockets ignorieren Kennwörter und erlauben dem entsprechenden Unix-Benutzer in ohne eine Passwortüberprüfung. Aus diesem Grund können Sie sich mit root anmelden, aber nicht mit einem anderen Benutzer.

Also besteht die Lösung darin, die Benutzer zu aktualisieren, damit sie% code_% nicht verwenden und ein Passwort richtig setzen.

Auf MariaDB (& lt; 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';

Sonst:

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

Dann

FLUSH PRIVILEGES;

Zur Erinnerung: Die Lösung, den Benutzer zu löschen und mit '%' neu zu erstellen, hat mich völlig aus der Datenbank ausgeschlossen und kann andere Probleme verursachen, wenn Sie nicht die auth_socket/unix_socket -Anweisung genau richtig haben Wurzel hast du schon.

Nach meiner Erfahrung tritt das Problem nur beim Benutzer root auf, da andere Benutzer manuell hinzugefügt werden und nicht Teil einer ersten Installation / Aktualisierung sind.

    
Gazzer 14.10.2017 06:18
quelle
2

Versuchen Sie, 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. Melden Sie sich als neuer Benutzer an:

    mysql -uadmin
    
Alex Yakovlev 28.05.2016 11:37
quelle
2

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 (nicht anwendbar, wenn sie sudo Zugriff haben)

  1. Loggen Sie sich in MySQL root shell ein:

    $ sudo mysql -u root -p
    
  2. Führen Sie die folgenden Abfragen aus:

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

    $ mysql -u root -p
    

Quelle:

Pfandrecht

    
reversiblean 02.12.2017 09:31
quelle
1

Probieren Sie zuerst diesen Code 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

Drücken Sie dann Ctrl+Z und geben Sie Folgendes ein: bg , um den Prozess vom Vordergrund in den Hintergrund zu führen, und bestätigen Sie dann Ihren Zugriff mit:

mysql -u root -proot
mysql> show grants;
    
ADHITHYA SRINIVASAN 28.05.2016 11:47
quelle
1

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 Passwort festzulegen, besteht darin, auf die native Authentifizierung umzuschalten:

  

$ sudo mysql

     

mysql & gt; ALTER USER 'root' @ 'localhost' IDENTIFIZIERT MIT   mysql_native_password BY "Test";

    
Vadiaz 26.07.2017 17:23
quelle
1

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 root zu löschen.

    
Franc Drobnič 03.01.2018 17:43
quelle
0

Ich habe einige Provisionierungsskripte angepasst, die ich für die Verwendung von MariaDB erstellt habe, und bin genau auf dieses Problem eingegangen. Zusammengefasst viele Informationen hier eine Gazzer Antwort wirklich Null in der Frage; alles läuft auf die Einstellung auth_socket / unix_socket hinaus.

Wenn Sie also MariaDB 5.5 (unter Ubuntu 14.04) und MariaDB 10 unter (Ubuntu 16.04) verwenden, hat die Anmeldung bei MySQL und das Ausführen dieses Befehls die Dinge sofort geklärt:

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

Die anderen Antworten - einschließlich der Antwort mit der höchsten Bewertung in diesem Beitrag von Loremhipsum - ermutigen Sie wirklich schlechte Praktiken, indem Sie das Ablegen empfehlen ein Benutzer und dann neu erstellen. Für mich ist das eine ziemlich radikale Lösung. Die beste / einfachste Lösung, um den Wert plugin zu annullieren, Privilegien zu bereinigen und mit Leben zu leben.

    
JakeGould 20.10.2017 02:54
quelle
-1

Ich hatte das gleiche Problem und führte folgendes aus:

mysql_upgrade --force
    
klob 03.05.2016 08:48
quelle

Tags und Links