- Veröffentlicht am
- • How2-Tipps
MySQL / MariaDB: Backup-User einrichten, der alles sichern, aber nichts verändern darf
- Autor
-
-
- Benutzer
- tmueller
- Beiträge dieses Autors
- Beiträge dieses Autors
-
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
mysql -u root -p
Alternativ natürlich auch mit einem anderen Admin-User.
Backup-User anlegen
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
GRANT
SELECT,
SHOW VIEW,
TRIGGER,
LOCK TABLES,
EVENT
ON *.* TO 'backup'@'localhost';
Optional (aber in der Praxis fast immer nötig):
-- 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:
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
mysql -u backup -p
SHOW DATABASES;
Test: Schreibzugriff erzwingen (muss fehlschlagen):
USE test;
CREATE TABLE test (id INT);
✅ Erwartet:
ERROR 1142 (42000): CREATE command denied
Perfekt.
Backup mit dem neuen User ausführen
Einzelne Datenbank
mysqldump -u backup -p datenbank_name > backup.sql
Alle Datenbanken
mysqldump -u backup -p --all-databases > alldb.sql
In Skripten (Beispiel)
bash backup.sh -u backup -F databases.txt -f folders.txt
Sicherheitstipp: .my.cnf für automatisierte Backups
Damit kein Passwort im Script steht:
nano ~/.my.cnf
[client]
user=backup
password=sicheres_passwort_hier
Rechte setzen:
chmod 600 ~/.my.cnf
Danach funktioniert:
mysqldump datenbank_name > backup.sql
✔️ sicher ✔️ automatisierbar ✔️ cron-tauglich
Optional: Zugriff auf bestimmte Datenbanken beschränken
Wenn nicht alle DBs gesichert werden sollen:
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
ALTER USER 'backup'@'localhost'
IDENTIFIED BY 'neues_passwort';
FLUSH PRIVILEGES;
Backup-User löschen
DROP USER 'backup'@'localhost';
FLUSH PRIVILEGES;
Aktuell vergebene Rechte prüfen
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