Minimale GRANTs, die mysqldump benötigt, um ein vollständiges Schema zu sichern? (TRIGGER fehlen !!)

79

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

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 (einschließlich Trigger und Prozeduren) mit dem Dump- Benutzer sichern . Ich rufe mysqldump folgendermaßen auf:

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

Mit der gedumpten Datei ist alles in Ordnung, bis auf die Trigger, sie fehlen !!

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

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

Also, ich denke es ist ein perms Frage ist ... was sind die zusätzlichen Zuschüsse mein Dump MySQL Bedürfnisse der Nutzer für den richtigen vollständigen Dump tun?

Emilio Nicolás
quelle

Antworten:

111

Angenommen, mit vollem Dump meinen Sie auch das VIEWs und das EVENTs, würden Sie 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, dann brauchen Sie leider auch EXECUTE.

Mein eigenes Problem ist: Warum brauche ich, SELECTwenn ich nur einen Dump ohne Daten erstellen möchte?

Jannes
quelle
2
Ab 5.5 benötigen Sie keine TRIGGER-Berechtigung, um den Triggercode auszugeben.
Bluecollarcoder
1
Ich verwende 5.5 und benötige das TRIGGER-Privileg, um den Triggercode zu sichern.
Heuri
In meinem Fall scheint es, dass ich auch LOCK TABLESin der Datenbank brauche, die ich versuche, sich selbst zu entleeren ... mit5.5.49-MariaDB
0xC0000022L
1
In Bezug auf @ 0xC0000022L Kommentar ist Verriegelungs Tabellen oder nicht optional für mysqldump, auf dem mysqldump Parameter abhängig (relevante Parameter sind --opt, --lock-tables, --lock-all-tables, --single-transactionund die jeweiligen --skip-*Varianten.
Torque
8

Ich fand die zusätzliche Bewilligung, die ich brauchte !!

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

Hier haben Sie den Verweis auf das offizielle Dokument: http://dev.mysql.com/doc/refman/5.5/en/privileges-provided.html#priv_trigger

Das TRIGGER-Privileg aktiviert Triggeroperationen. Sie müssen über diese Berechtigung verfügen, damit eine Tabelle Trigger für diese Tabelle erstellen, löschen oder ausführen kann.

Emilio Nicolás
quelle
3
Der Name ist eigentlich TRIGGER, nicht TRIGGERS
thenickdude
Auch wenn dies eine Antwort auf das Autorenproblem sein mag, beantwortet es nicht die Frage: "Was sind die Mindestanforderungen für die Gewährung eines vollständigen Dumps?" Zum einen: EVENT und SHOW VIEW fehlen.
Jannes
Ab 5.5 benötigen Sie keine TRIGGERBerechtigung zum Speichern des Triggercodes.
Bluecollarcoder
5
Ich benutze 5.5 und ich brauchte es tatsächlich
Emilio Nicolás
1

Ich habe festgestellt, dass irgendwann, wenn der Benutzer VIEW DEFINER nicht existiert, der Speicherauszug fehlschlägt.

Ändern Sie es, wie es

BaZZiliO
quelle
Nicht sicher, warum dies abgelehnt wurde, löste mein Problem. Ich hatte definer als person statt angegeben person@localhost. Vielen Dank!
Stianlik
1

Zusätzlich zur Antwort von Jannes muss Ihrem MySQL-Benutzer bei Verwendung von mysqldump mit der Option --tab (erstellt eine durch Tabulatoren getrennte Textdatei für jede ausgegebene Tabelle) auch die folgenden Berechtigungen erteilt werdenFILE :

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

Offizielle Dokumentreferenz: 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.

Rotem Ad
quelle