MariaDB: Die Sache mit dem root-Passwort

von Thomas Lange

Bei der aktuellen Debian-Version Stretch wird anstatt MySQL nun MariaDB verwendet. Manche wundert es vielleicht, dass bei der Installation von MariaDB nicht nach einem Passwort für den Datenbankbenutzer root gefragt wird, wie es sonst bei der Installation von MySQL der Fall war. Das liegt daran, dass sich der Linux-Benutzer root bei MariaDB direkt über das Unix-Domain-Socket als Datenbankbenutzer root ohne Passwort authentifizieren kann. Das hat den Vorteill, dass andere Dienste und Skripte kein root-Passwort mehr benötigen um sich anzumelden (zum Beispiel Backup-Skripte, in die man immer das root-Passwort eingetragen hat):

$ sudo mysql -u root

… dann setze ich halt ein root-Passwort

Aus Gewohnheit möchte man jetzt ein Passwort für den root-Benutzer vergeben, damit man sich auch über eine Schnittstelle wie phpMyAdmin einloggen und den Server administrieren kann (sofern man nicht auf der Kommandozeile arbeitet). Das kann ich aber nicht empfehlen, da andere Dienste davon ausgehen, dass sie sich direkt über das Socket mit root-Rechten (Linux Root) ohne Passwort authentifizieren können. Wenn man nun einfach ein Passwort für den Benutzer definiert, dann funktionieren diese Dienste eventuell nicht mehr und man erhält am nächsten Morgen eine Mail vom Cron Daemon mit einer Fehlermeldung wie zum Beispiel:

/etc/cron.daily/logrotate:
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
error: error running shared postrotate script for '[…]'
run-parts: /etc/cron.daily/logrotate exited with return code 1

Dort kann man erkennen, dass versucht wurde, sich ohne Passwort zu authentifizieren, was dann aber aufgrund eines gesetzten Passworts fehlgeschlagen ist. Also, anstatt den Datenbankbenutzer root anzufassen, empfehle ich, einfach einen neuen Benutzer zur Administration anzulegen, mit dem man sich auch über phpMyAdmin einloggen kann (es gibt auch noch ein Skript namens mysql_secure_installation, aber das definiert auch ein Passwort für den root-Benutzer, was kontraproduktiv ist):

$ sudo mysql -u root
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'password_here';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
Der Verfasser

Hi. Mein Name ist Thomas und ich bin nicht gut im Schreiben von Vorstellungen. Ich mag die IT und liebe es mit GNU\Linux zu arbeiten. Auf diesem Blog gibt es Beiträge über die verschiedensten Dinge, die mich beschäftigen oder interessieren (dieses Blogsystem ist eine Eigenentwicklung). Deine Fragen, Ergänzungen und Korrekturen zu Inhalten kannst du mir gerne per Mail mitteilen. 😊