LINUXMAKER, OpenSource, Tutorials

Problem beim Root-Login zusammen mit MariaDB

In MariaDB gibt es das Authentifizierungs-Plugin unix_socket (siehe auch Dokumentation). Unter einer Ubuntu- und Debian-Installation ist dieses Plugin bei einer MariaDB-Installation standardmäßig aktiviert.

Im Prinzip handelt es sich dabei um eine angenehme Sache. Denn solange man als root bzw. mit sudo arbeitet, kann man sich ohne Passwort beim MySQL-Server anmelden:

# mysql -u root
         
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 48
Server version: 10.1.29-MariaDB-6 Debian buildd-unstable
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> status;
Current user:           root@localhost
...

Allerdings sobald Sie nicht als root eingeloggt sind, wird der Login scheitern.

~$ mysql -u root -p
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Somit ist MariaDB generell nun auch ohne Passwort abgesichert. Problematisch wird es erst, wenn Sie MariaDB administrieren möchten , wenn Sie nicht als root oder mit sudo abeiten sollten.

Root-Passwort unter MariaDB setzen

Erfahrene Benutzer unter MariaDB werden wissen, wie in der mysql.user-Datenbank das Passwort für den root definiert wird.

# mysql -u root
MariaDB [(none)]> update mysql.user set password=password('secret') where user='root';
MariaDB [(none)]> flush privileges;

Ab jetzt müssen Sie sich mit einem Passwort authetifizieren, so wie in der Vergangenheit üblich war.

# sudo mysql -u root -p
Enter password:

Der MySQL-Login als gewöhnlicher Benutzer

Wenn Sie unter Linux nicht als root eingeloggt sind bzw. sudo nicht verwenden, funktioniert der Login nachwievor noch nicht.

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. Interessant dürfte zuerst ein Blick in die Tabelle mysql.user sein ...

MariaDB [(none)]> select user,host,password,plugin from mysql.user;
+------+-----------+-------------------------------------------+-------------+
| user | host      | password                                  | plugin      |
+------+-----------+-------------------------------------------+-------------+
| root | localhost | secrethashcode                            | unix_socket |
+------+-----------+-------------------------------------------+-------------+
1 row in set (0.00 sec)

… und setzen Sie die plugin-Spalte dann auf '':

update mysql.user set plugin='' where user='root';
flush privileges;

Jetzt funktioniert der Login wieder wie in der Vergangenheit.

Besonderheiten (Update 7.3.2016)

MariaDB wird unter Debian Jessie 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 'secret' with grant option;