Benutzer mit Rechten für mysqldump ausstatten

MySQL Backupscripte sind ein potentielles Sicherheitsrisiko, wenn zum Sichern der root Benutzer verwendet wird. Denn meist steht das Passwort direkt im Script oder ist in der my.cnf abgelegt. Ein potenzieller Angreifer der lesend auf das System gelangt, hat dadurch leichtes Spiel an die Passwörter zu kommen. Deshalb empfiehlt es sich Backups mit einem separaten Benutzer anzulegen, der nur die nötigsten Rechte hat. Ich gehe meist wie folgt vor:

Benutzer angelegen

CREATE USER 'backupnutzer'@'localhost' IDENTIFIED BY 'geheim';

Berechtigungen setzen (Wer keine Trigger oder Views benutzt kann SHOW VIEW bzw. TRIGGER auch weg lassen.)

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

Hinweis! Diese Query vergibt globale Rechte. Will man nur auf eine bestimmte Datenbank sichern sollte der Befehl so aussehen.

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

Rechte neu einlesen

FLUSH PRIVILEGES;

Fertig. Nun kann der Benutzer backupnutzer mit dem Passwort geheim in den Scripten verwendet werden. Ein potentieller Angreifer würde zwar trotzdem noch auf die Datenbank gelangen, könnte aber deutlich weniger Schaden anrichten.

MySQL Datenbankstruktur sichern

Zum Entwerfen und Bearbeiten von Datenbanken habe ich mich zur Zeit auf MySQL Workbench eingeschossen. Neben vielen anderen Features kann man hier via „Reverse Engineer“ bestehende Datenbanken einlesen.

Doch heute hatte ich das Problem keinen direkten Zugriff auf die DB zu haben. Das Einspielen eines aktuellen Dumps war aufgrund der Größen- und Performancebeschränkungen auf meinem Netbook nicht möglich.

Ich brauchte also nur ein Dump der Struktur. Da keine GUI wie phpMyAdmin verfügbar war, musste ich mysqldump verwenden:

$ mysqldump -u root -p -d datenbank > datenbankstruktur.sql

Der Parameter -d bewirkt, das nur die Struktur der Datenbank – also ohne Daten – gesichert wird. Alternativ kann auch —no-data angegeben werden. Dieses kleine Dump konnte ich dann Problemlos in MySQL Workbench einlesen und bearbeiten.

Weitere Informationen zum Thema:
http://www.mysql.de/downloads/workbench/
http://dev.mysql.com/doc/refman/5.1/de/mysqldump.html