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