In MariaDB gibt es das Authentifizierungs-Plugin unix_socket
(Dokumentation). Heute bin ich das erste Mal darüber gestolpert, weil dieses Plugin bei einer MariaDB-Installation unter Ubuntu 15.10 standardmäßig aktiv ist.
An sich ist das eine feine Sache: Solange Sie als root
bzw. mit sudo
arbeiten, können Sie sich ohne Passwort beim MySQL-Server anmelden:
sudo mysql -u root
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 60
MariaDB [(none)]> status;
Current user: root@localhost
...
Wenn Sie gerade nicht root
sind, scheitert der Login.
mysql -u root
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Insofern ist MariaDB nun auch ohne Passwort abgesichert. Probleme treten nur dann auf, wenn Sie MariaDB auch dann administrieren möchten, ohne unter Linux als root
oder mit sudo
zu arbeiten.
MariaDB-root-Passwort setzen
Erfahrene Benutzer werden sagen: Kein Problem, es muss in der mysql.user-Datenbank eben ein Passwort für root
definiert werden.
sudo mysql -u root
MariaDB [(none)]> update mysql.user set password=password('geheim') where user='root';
MariaDB [(none)]> flush privileges;
Von nun an müssen Sie sich wieder, wie in der Vergangenheit üblich , mit einem Passwort authentifizieren:
sudo mysql -u root -p
Enter password: *******
MySQL-Login als gewöhnlicher Benutzer
Das Problem ist nur: Wenn Sie unter Linux nicht als root
eingeloggt sind bzw. sudo
nicht verwenden, funktioniert der Login weiterhin nicht.
mysql -u root -p
Enter password: ******
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
MariaDB führt jetzt nämlich zwei Authentifizierungsverfahren parallel aus: Der DB-Server überprüft, ob Sie als Linux-Benutzer root
-Rechte haben UND ob Sie das korrekte Passwort angeben. Das Passwort alleine reicht nicht mehr.
Wenn sich MariaDB so verhalten soll wie früher, d.h., dass Sie sich nach einer Passwort-Angabe auch als gewöhnlicher Benutzer als MariaDB-root anmelden können, dann müssen Sie das unix_socket
-Plugin deaktivieren. Werfen Sie zuerst einen Blick in die Tabelle mysql.user …
sudo mysql -u root -p
Enter password: *******
select user,host,password,plugin from mysql.user;
+------+-----------+------------------------+-------------+
| user | host | password | plugin |
+------+-----------+------------------------+-------------+
| root | localhost | *geheimerhashcode | unix_socket |
| root | e320 | *geheimerhashcode | unix_socket |
| root | 127.0.0.1 | *geheimerhashcode | unix_socket |
| root | ::1 | *geheimerhashcode | unix_socket |
+------+-----------+------------------------+-------------+
… und setzen Sie die plugin
-Spalte dann auf ''
:
update mysql.user set plugin='' where user='root';
flush privileges;
Von nun an funktioniert der Login wieder wie in der Vergangenheit.
Nebenwirkungen (Update 7.3.2016)
MariaDB wird unter Ubuntu 15.10 durch das Init-V-Script /etc/init.d/mysql
gestartet und wieder beendet. Zum Beenden greift dieses Script auf mysqladmin
zurück und verlässt sich dabei darauf, dass mysqladmin
mit root
-Rechten ohne Passwort funktioniert. Nach den obigen Änderungen ist das aber nicht mehr der Fall.
Damit das Init-Script wieder funktioniert, müssen Sie in /etc/mysql/debian.cnf
zweimal Ihr MySQL-root
-Passwort im Klartext eintragen (jeweils in der schon vorgesehenen Zeile password = ...
). Das ist sicherheitstechnisch natürlich nicht wünschenswert.
Insofern ist es vermutlich besser, die Default-Konfiguration für den MySQL-root-Benutzer zu belassen, wie sie nach einer MariaDB-Neuinstallation ist. Damit Sie auch ohne root
-Login MySQL-Administrationsarbeiten durchführen können, richten Sie den MySQL-Benutzer root2
mit uneingeschränkten Rechten ein:
sudo -s
mysql
grant all on *.* to root2@localhost
identified by 'geheim' with grant option;
Hallo,
nach Upgrade von MariaDB 10.0.1 auf 10.1.14+ funktioniert nach dem Start der Datenbankzugriff erst mal. Wenn der automatische Anmeldeprozess des Benutzers unter Ubuntu 16.04 abgeschlossen ist, muss ich für den Datenbankzugriff das Passwort neu vergeben:
Dann funktioniert es wieder.
Weder der Kniff mit der Debian.cnf oder mit root2@localhost greift aber anscheinend für die automatische Anmeldung?
Server version: 10.0.24-MariaDB-7 Ubuntu 16.04
Ist geklärt:
Datenbanken gesichert!
sudo /etc/init.d/mysql stop
sudo apt-get purge mariadb-server mariadb* mysql*
sudo apt-get autoremove
sudo apt-get install mariadb-server
sudo mysql_secure_installation
sudo mysql_upgrade -p –force
ALLES SUPER?
Uff, vielen Dank für die Infos! Ein schräges Problem, das ich so niemals verstanden hätte.
Danke für das Tutorial, hat mir sehr geholfen.
Herzlichen Dank! Ich war mir schon einiges über das neue MySQL-Prozedere bewust. Aber erst diese Infos halfen mir wirklich weiter…
Das Tutorial bezieht sich auf das Problem, welches ich habe, allerdings ist es für mich nicht verständlich. Ich bin neu in dieser Materie und hätte mir eine bessere Beschreibung gewünscht wie ich zu den verschiedenen Einstellungen komme. Welche Dateien muss ich anpassen, ich kann die, die ich vermute welche es sein sollen nicht finden. Ist die Beschreibung auch für eine Installation auf Windows oder bezieht sich alles auf Linux?