How2-Tipps

MySQL / MariaDB: Backup-User einrichten, der alles sichern, aber nichts verändern darf

Sicherer MySQL/MariaDB Backup-User: Alle Datenbanken sichern, ohne Änderungsrechte. Schritt-für-Schritt-Anleitung mit Best Practices.

1 min Lesezeit
MySQL / MariaDB: Backup-User einrichten, der alles sichern, aber nichts verändern darf

Regelmäßige Datenbanksicherungen sind Pflicht – egal ob auf einem Webserver, in einer VM oder auf einem produktiven System. Was keine gute Idee ist: Backups dauerhaft mit dem root-User oder einem voll privilegierten Datenbankbenutzer auszuführen.

Die Lösung: Ein dedizierter Backup-User, der

  • alle Datenbanken sichern darf
  • keine Daten ändern, löschen oder anlegen kann
  • 🔐 nach dem Prinzip der minimalen Rechte arbeitet

In diesem Artikel zeige ich Schritt für Schritt, wie du einen solchen reinen Backup-User für MySQL oder MariaDB einrichtest.

Warum ein eigener Backup-User?

Ein Backup-User bringt mehrere Vorteile:

  • Sicherheitsgewinn: Kein Vollzugriff auf die DB
  • Saubere Trennung: Backup ≠ Administration
  • Geringes Risiko bei Leaks: Passwort kompromittiert ≠ Datenverlust
  • Audit-fähig: Klar nachvollziehbar, wofür der User existiert

Kurz: Ein Backup-User ist Best Practice.

Als Admin in MySQL / MariaDB einloggen

``bash mysql -u root -p ``

Alternativ natürlich auch mit einem anderen Admin-User.

Backup-User anlegen

``sql CREATE USER 'backup'@'localhost' IDENTIFIED BY 'sicheres_passwort_hier'; ``

👉 Tipp: Verwende ein eigenes, starkes Passwort, idealerweise nur für diesen Zweck.

Minimale Rechte für Backups vergeben

``sql GRANT SELECT, SHOW VIEW, TRIGGER, LOCK TABLES, EVENT ON . TO 'backup'@'localhost'; ``

Optional (aber in der Praxis fast immer nötig):

```sql -- Alle Datenbanken sehen dürfen GRANT SHOW DATABASES ON . TO 'backup'@'localhost';

-- Für konsistente Backups mit --single-transaction GRANT RELOAD ON . TO 'backup'@'localhost'; ```

Rechte aktivieren:

``sql FLUSH PRIVILEGES; ``

Was darf dieser User – und was nicht?

Erlaubt ✅

  • Daten lesen
  • Tabellen, Views, Trigger und Events sichern
  • Datenbanken auflisten
  • Konsistente Backups erstellen

Verboten ❌

  • Tabellen anlegen
  • Daten ändern
  • Daten löschen
  • Strukturen verändern
  • Benutzer verwalten

👉 Genau das, was ein Backup-User können soll – und nicht mehr.

Erklärung der vergebenen Rechte

| Recht | Zweck | | ---------------- | ------------------------------------ | | SELECT | Basis für das Lesen aller Daten | | SHOW VIEW | Views sichern | | TRIGGER | Trigger sichern | | LOCK TABLES | Konsistente Backups (MyISAM) | | EVENT | Events sichern | | SHOW DATABASES | Alle DBs anzeigen | | RELOAD | Für mysqldump --single-transaction |

Backup-User testen

``bash mysql -u backup -p ``

``sql SHOW DATABASES; ``

Test: Schreibzugriff erzwingen (muss fehlschlagen):

``sql USE test; CREATE TABLE test (id INT); ``

✅ Erwartet:

`` ERROR 1142 (42000): CREATE command denied ``

Perfekt.

Backup mit dem neuen User ausführen

Einzelne Datenbank

``bash mysqldump -u backup -p datenbank_name > backup.sql ``

Alle Datenbanken

``bash mysqldump -u backup -p --all-databases > alldb.sql ``

In Skripten (Beispiel)

``bash bash backup.sh -u backup -F databases.txt -f folders.txt ``

Sicherheitstipp: .my.cnf für automatisierte Backups

Damit kein Passwort im Script steht:

``bash nano ~/.my.cnf ``

``ini [client] user=backup password=sicheres_passwort_hier ``

Rechte setzen:

``bash chmod 600 ~/.my.cnf ``

Danach funktioniert:

``bash mysqldump datenbank_name > backup.sql ``

✔️ sicher ✔️ automatisierbar ✔️ cron-tauglich

Optional: Zugriff auf bestimmte Datenbanken beschränken

Wenn nicht alle DBs gesichert werden sollen:

```sql GRANT SELECT, SHOW VIEW, TRIGGER, LOCK TABLES ON db1.* TO 'backup'@'localhost';

GRANT SELECT, SHOW VIEW, TRIGGER, LOCK TABLES ON db2.* TO 'backup'@'localhost';

FLUSH PRIVILEGES; ```

Passwort ändern

```sql ALTER USER 'backup'@'localhost' IDENTIFIED BY 'neues_passwort';

FLUSH PRIVILEGES; ```

Backup-User löschen

``sql DROP USER 'backup'@'localhost'; FLUSH PRIVILEGES; ``

Aktuell vergebene Rechte prüfen

``sql SHOW GRANTS FOR 'backup'@'localhost'; ``

Beispielausgabe:

`` GRANT SELECT, RELOAD, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER, SHOW DATABASES ON . TO 'backup'@'localhost' ``

Mit diesem Setup erhältst du einen sauberen, sicheren und professionellen Backup-User, der:

  • 🔒 keine Änderungen durchführen kann
  • 📦 vollständige Backups ermöglicht
  • ⚙️ perfekt für Automatisierung geeignet ist
  • 🛡️ das Sicherheitsrisiko deutlich reduziert