Kurz gesagt, auf MariaDB
UPDATE mysql.user SET plugin = 'mysql_native_password',
Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
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:
mysql -uroot -p
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:
select User,host,plugin from mysql.user;
+----------------+-----------+-----------------------+
| User | host | plugin |
+----------------+-----------+-----------------------+
| root | localhost | auth_socket |
+----------------+-----------+-----------------------+
Sie werden feststellen auth_socket
(was unix_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.
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 ausprobiert. Das ist also eine Alternative.)
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;
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.