open-how2 – Entdecke. Verstehe. Nutze.
Veröffentlicht am
How2-Tipps

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

Autor
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

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