Ich Ubuntu nur 16.04 LTS installiert zusammen mit den Paketen php
, mariadb
und nginx
. Ich lief mysql_secure_installation
und änderte das root-Passwort.
Wenn ich versuche, mich mysql
mit dem Root-Konto anzumelden, während ich unter Ubuntu als normaler Benutzer angemeldet bin, wird mir der Zugriff verweigert.
Wenn ich mich mit sudo mysql
anmelde, fragt mich mysql nicht einmal nach dem Passwort. Wenn ich laufe, mysql_secure_installtion
sehe ich, dass alte Einstellungen nie dauerhaft festgelegt wurden.
Was mache ich falsch?
quelle
%
dass Sie von überall aus eine Verbindung herstellen können ... aus der Ferne?grant all privileges on *.* to 'root'@'localhost' with grant option;
Übernahme von Change User Password in MySQL 5.7 mit "plugin: auth_socket"
Um also den
plugin
Rücken zu ändernmysql_native_password
:Einloggen mit sudo:
Ändern Sie das
plugin
und setzen Sie ein Passwort mit einem einzigen Befehl:Natürlich können Sie auch den obigen Befehl verwenden, um ein leeres Kennwort festzulegen.
Nur für den Datensatz (und
MariaDB < 10.2
Benutzer) gibt es auch eine andere Möglichkeit, nur das zu ändern,plugin
ohne ein Passwort anzugeben (es leer zu lassen):quelle
UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root'; FLUSH PRIVILEGES;
Kurz gesagt, auf MariaDB
Hier ersetzen Sie NEWPASSWORD durch das gewünschte Passwort und alles andere wörtlich.
Das Problem hierbei ist, dass bei der Installation / Aktualisierung von MariaDB oder MySQL (insbesondere wenn irgendwann root ohne Kennwort festgelegt wird) in der Tabelle Users das Kennwort tatsächlich leer ist (oder ignoriert wird) und die Anmeldung vom entsprechenden Systembenutzer abhängt an einen MySQL-Benutzer. Sie können dies folgendermaßen testen, indem Sie zum Systemstamm wechseln und dann Folgendes eingeben:
Geben Sie dann entweder kein oder das falsche Passwort ein. Sie werden wahrscheinlich hereingelassen. (Möglicherweise können Sie sich sogar vom Unix-Stammverzeichnis aus anmelden,
# mysql
da das Kennwort irrelevant und der Benutzer definiert ist.)Also was passiert gerade? Nun, wenn Sie sich als root anmelden und Folgendes tun:
Sie werden feststellen
auth_socket
(wasunix_socket
auf MariaDB lesen kann ). Diese Sockets ignorieren Passwörter und lassen den entsprechenden Unix-Benutzer ohne Passwortprüfung ein. Aus diesem Grund können Sie sich mit root anmelden, jedoch nicht mit einem anderen Benutzer.Die Lösung besteht also darin, die Benutzer so zu aktualisieren, dass sie das
auth_socket/unix_socket
Kennwort nicht verwenden und es ordnungsgemäß einrichten.Auf MariaDB (<10.2, siehe Kommentare unten), die ab 2017 auf Ubuntu 16 verfügbar ist, sollte dies ausreichen. NEWPASSWORD ist Ihr Passwort.
mysql_native_password
Sie geben wörtlich.(Es ist möglich, dass das Setzen des Plugins auf "leer" funktioniert. YMMV. Ich habe das nicht ausprobiert. Das ist also eine Alternative.)
Andernfalls:
Dann
Die Lösung, die darin besteht, den Benutzer zu löschen und ihn mit '%' neu zu erstellen, hat mich vollständig aus der Datenbank ausgesperrt und kann andere Probleme verursachen, wenn Sie die
grant
Anweisung nicht genau richtig verstehen.Nach meiner Erfahrung tritt das Problem nur beim Root-Benutzer auf, da andere Benutzer manuell hinzugefügt werden und nicht Teil einer Erstinstallation / -aktualisierung sind.
quelle
mysql_secure_installation
nicht den gleichen Effekt hatte. Wo speichert es das neue Passwort?UPDATE
das für MariaDB <10.2 und für dieALTER
anderen Versionen? Und ist die zweiteUPDATE
eine Alternative zur ersten, oder müssen wir beide eingeben? Ist 'mysql_native_password' etwas, das wörtlich eingegeben werden kann, oder sollten wir es durch unser beabsichtigtes Root-Passwort für MySQL ersetzen?mysql_native_password
ist diese Option.Wenn Sie MySQL / MariaDB aus dem Basis-Repository installiert haben, können sich Benutzer nicht über ihre Unix-Anmeldungen bei MySQL als MySQL-Root anmelden (gilt nicht, wenn sie sudo- Zugriff haben).
Melden Sie sich bei der MySQL-Root-Shell an:
Führen Sie die folgenden Abfragen aus:
Öffne eine neue Shell, dann:
Quelle
quelle
mysql -u root -p -e "use mysql;update user set plugin='mysql_native_password' where user='root';flush privileges;"
Versuche einen neuen MySQL Account zu erstellen, bei mir hat es geklappt (MySQL 5.7.12):
Melden Sie sich als sudo an:
Erstellen Sie einen neuen Benutzer und gewähren Sie ihm Berechtigungen (kein Passwort):
Als neuer Benutzer anmelden:
quelle
Ich musste zwei Dinge tun (danke an @Todor und @Loremhipsum):
und dann:
Ich würde nicht empfehlen, Benutzer fallen zu lassen
root
.quelle
Versuchen Sie diesen Code zuerst,
und dann,
Drücken Sie dann
Ctrl+Z
und geben Sie Folgendes einbg
:, um den Prozess vom Vordergrund in den Hintergrund zu starten. Überprüfen Sie dann Ihren Zugriff durch:quelle
Wenn Sie den Befehl mysql nur unter dem Root-Benutzer ausführen, wird Ihnen der Zugriff gewährt, ohne dass Sie nach dem Kennwort gefragt werden, da die Socket-Authentifizierung für root @ localhost aktiviert ist. .
Die einzige Möglichkeit, ein Kennwort festzulegen, besteht darin, zur systemeigenen Authentifizierung zu wechseln, z.
quelle
Ich habe einige von mir erstellte Bereitstellungsskripte für die Verwendung von MariaDB angepasst und bin auf genau dieses Problem gestoßen. Wenn Sie hier eine Menge Informationen zusammenstellen, ist die Antwort eines Gazzers in der Ausgabe wirklich Null . es läuft alles auf die
auth_socket
/unix_socket
-Einstellung hinaus.Wenn Sie also MariaDB 5.5 (unter Ubuntu 14.04) und MariaDB 10 (unter Ubuntu 16.04) verwenden, haben Sie sich bei MySQL angemeldet und diesen Befehl ausgeführt.
Die anderen Antworten - einschließlich der am höchsten bewerteten Antwort in diesem Beitrag von Loremhipsum - ermutigen wirklich zu schlechten Praktiken, indem sie empfehlen, einen Benutzer zu löschen und anschließend neu zu erstellen. Für mich ist das eine ziemlich radikale Lösung. Die beste / einfachste Lösung ist, den
plugin
Wert aufzuheben , Berechtigungen zu löschen und mit dem Leben weiterzumachen .quelle
Ich hatte das gleiche Problem und habe Folgendes behoben:
quelle
root
mit eingestellt werdenplugin
Einstellungen , die nicht Standard sind. Der einzige Randfall, in dem ein Upgrade der Datenbank in einem solchen Fall hilfreich sein könnte, ist, wenn dermysql_upgrade
Prozess selbst dieplugin
Einstellung berücksichtigt , die ich bezweifle.