it-swarm.com.de

Erforderliche Mindest-GRANTs für mysqldump zum Ablegen eines vollständigen Schemas? (TRIGGERs fehlen!)

Ich habe einen MySQL-Benutzer namens dump mit den folgenden Perms:

GRANT USAGE ON *.* TO 'dump'@'%' IDENTIFIED BY ...
GRANT SELECT, LOCK TABLES ON `mysql`.* TO 'dump'@'%'
GRANT SELECT, LOCK TABLES ON `myschema`.* TO 'dump'@'%'

Ich möchte alle Daten (eingeschlossene Auslöser und Prozeduren) mit dem Benutzer dump sichern. Ich rufe mysqldump auf folgende Weise an:

mysqldump -u dump -p --routines --triggers --quote-names --opt \
    --add-drop-database --databases myschema > myschema.sql

Mit der abgelegten Datei ist alles in Ordnung, außer den Triggern, sie fehlen !!

Die Trigger werden korrekt ausgegeben, wenn ich mysqldump mit root MySQL-Benutzer versuche:

mysqldump -u root -p --routines --triggers --quote-names --opt \
    --add-drop-database --databases myschema > myschema.sql

Ich denke, es ist ein Dauerproblem. Was sind die extra-Berechtigungen, die mein dump MySQL-Benutzer benötigt, um den vollständigen Speicherauszug korrekt auszuführen?  

68
Emilio Nicolás

Angenommen, mit vollem Speicherauszug meinen Sie auch die Variablen VIEWs und EVENTs, würden Sie Folgendes benötigen:

GRANT USAGE ON *.* TO 'dump'@'%' IDENTIFIED BY ...;
GRANT SELECT, LOCK TABLES ON `mysql`.* TO 'dump'@'%';
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON `myschema`.* TO 'dump'@'%';

und wenn Sie VIEWs haben, die eine Funktion ausführen, benötigen Sie leider auch EXECUTE.

Mein eigenes Problem ist: Warum brauche ich SELECT, wenn ich nur einen No-Data-Dump erstellen möchte?

96
Jannes

Ich fand den zusätzlichen GRANT, den ich brauchte !!

  GRANT TRIGGER ON `myschema`.* TO 'dump'@'%'

Hier haben Sie die Referenz auf dem offiziellen Dokument: http://dev.mysql.com/doc/refman/5.5/de/privileges-provided.html#priv_trigger

Das TRIGGER-Privileg ermöglicht Triggeroperationen. Sie müssen über dieses Recht verfügen, damit eine Tabelle Auslöser für diese Tabelle erstellen, löschen oder ausführen kann.

8
Emilio Nicolás

Ich habe festgestellt, dass der Dump-Vorgang manchmal fehlschlägt, wenn der VIEW DEFINER-Benutzer nicht existiert.

Ändern Sie es wie beschrieben dort

1
BaZZiliO

Zusätzlich zu Jannes antworte bei Verwendung von mysqldump mit der Option - tab (erzeugt eine durch Tabulatoren getrennte Textdatei für jede ausgegebene Datei Tabelle) muss Ihrem MySQL-Benutzer auch das Privileg FILE gewährt werden :

GRANT FILE ON *.* TO 'dump'@'%';

Offizielle Referenz zu Dokumenten: https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_tab

Erwähnt in diesem Abschnitt:

Diese Option sollte nur verwendet werden, wenn mysqldump auf demselben Computer wie der mysqld-Server ausgeführt wird. Da der Server * .txt-Dateien in dem von Ihnen angegebenen Verzeichnis erstellt, muss das Verzeichnis vom Server beschreibbar sein und das von Ihnen verwendete MySQL-Konto muss über die Berechtigung FILE verfügen. Da mysqldump * .sql im selben Verzeichnis erstellt, muss es von Ihrem Systemanmeldekonto beschreibbar sein.

0
Rotem Ad