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;