Überarbeitet am 8. September 2026.

Wer einen eigenen Server betreibt, braucht früher oder später für WordPress, Nextcloud oder eine andere Anwendung eine neue Datenbank. Das ist mit MariaDB und MySQL schnell erledigt – ich würde dafür aber immer einen eigenen Datenbankbenutzer pro Anwendung anlegen und nicht einfach überall den Datenbank-Root verwenden.

Meine alte Kurznotiz dazu hatte außerdem einen Fehler: Sie erstellte zwar einen Benutzer, aber die eigentliche Datenbank fehlte. Und WITH GRANT OPTION gab dem App-Benutzer unnötig das Recht, Berechtigungen weiterzugeben. Das machen wir heute sauberer.

1. Als Datenbank-Administrator anmelden

Auf Debian und Ubuntu mit MariaDB funktioniert häufig:

sudo mariadb

Bei MySQL kann je nach Installation stattdessen dieser Befehl passen:

sudo mysql

Wenn der Root-Benutzer mit Passwort eingerichtet wurde:

mysql -u root -p

2. Datenbank anlegen

Als Beispiel verwende ich eine Anwendung namens meineapp:

CREATE DATABASE meineapp
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

utf8mb4 ist für moderne Anwendungen eine vernünftige Standardwahl, weil damit der vollständige Unicode-Zeichensatz zur Verfügung steht.

3. Eigenen Benutzer erstellen

CREATE USER 'meineapp'@'localhost'
  IDENTIFIED BY 'HIER_EIN_LANGES_ZUFAELLIGES_PASSWORT';

Ein zufälliges Passwort kann man zum Beispiel vorher in einer zweiten Shell erzeugen:

openssl rand -base64 24

Das Passwort anschließend in der Konfiguration der jeweiligen Anwendung hinterlegen und nicht für andere Dienste wiederverwenden.

4. Rechte nur für diese Datenbank vergeben

GRANT ALL PRIVILEGES
  ON meineapp.*
  TO 'meineapp'@'localhost';

Damit darf dieser Benutzer innerhalb von meineapp arbeiten, bekommt aber keine globalen Rechte auf andere Datenbanken.

Bewusst nicht dabei: WITH GRANT OPTION. Eine normale Webanwendung muss normalerweise keine Datenbankrechte an andere Benutzer weitergeben können.

5. Rechte kontrollieren

SHOW GRANTS FOR 'meineapp'@'localhost';

Damit lässt sich direkt prüfen, welche Berechtigungen der neue Benutzer tatsächlich besitzt.

6. Verbindung mit dem neuen Benutzer testen

Zuerst die Admin-Sitzung verlassen:

EXIT;

Dann mit dem neuen Benutzer anmelden:

mysql -u meineapp -p meineapp

Wenn die Anmeldung funktioniert, ist die Kombination aus Datenbank, Benutzer und Passwort grundsätzlich einsatzbereit.

Brauche ich FLUSH PRIVILEGES?

Nach normalen Befehlen wie CREATE USER, GRANT oder REVOKE ist ein zusätzliches FLUSH PRIVILEGES nicht nötig. Diese Befehle aktualisieren die Berechtigungen über die vorgesehenen Verwaltungsmechanismen selbst.

FLUSH PRIVILEGES war vor allem dann relevant, wenn jemand die internen Grant-Tabellen direkt verändert hat. Genau das sollte man heute nicht machen.

Was bedeutet 'localhost'?

Der Benutzername besteht bei MySQL/MariaDB aus Benutzer und Herkunft. 'meineapp'@'localhost' darf sich nur lokal auf dem Datenbankserver anmelden. Das ist für viele klassische Installationen genau richtig.

Wenn die Anwendung von einem anderen Server oder aus einem getrennten Docker-Netzwerk zugreift, muss die erlaubte Herkunft angepasst werden. Ich würde dafür aber nicht gedankenlos einen komplett offenen Host-Eintrag verwenden, sondern den Zugriff so eng wie möglich auf das tatsächlich benötigte Netzwerk beschränken.

Kurzfassung

CREATE DATABASE meineapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'meineapp'@'localhost' IDENTIFIED BY 'LANGES_PASSWORT';
GRANT ALL PRIVILEGES ON meineapp.* TO 'meineapp'@'localhost';
SHOW GRANTS FOR 'meineapp'@'localhost';

Mehr Hintergrund gibt es in der MySQL-Dokumentation zum Anlegen von Datenbanken sowie bei CREATE USER und GRANT.