web-dev-qa-db-fra.com

Le minimum de GRANT requis par mysqldump pour vider un schéma complet? (Les déclencheurs sont manquants !!)

J'ai un utilisateur MySQL appelé dump avec les permanentes suivantes:

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

Je souhaite vider toutes les données (déclencheurs et procédures inclus) à l'aide de l'utilisateur dump. J'appelle mysqldump de la manière suivante:

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

Tout est OK avec le fichier vidé sauf les déclencheurs, ils sont manquants !!

Les déclencheurs sont dumpés correctement si j'essaie mysqldump avec root utilisateur MySQL:

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

Donc, je suppose que c’est un problème permanent ... Quels sont les subventions supplémentaires dont mon utilisateur dump a besoin pour effectuer correctement le dump complet? 

68
Emilio Nicolás

En supposant que vous entendez également le VIEWs et le EVENTs, vous aurez besoin de:

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'@'%';

et si vous avez VIEWs qui exécute une fonction, alors, malheureusement, vous avez également besoin de EXECUTE.

Mon propre problème est le suivant: pourquoi ai-je besoin de SELECT si je veux seulement faire un cliché sans données?

96
Jannes

J'ai trouvé la subvention supplémentaire dont j'avais besoin !!

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

Ici vous avez la référence sur la doc officielle: http://dev.mysql.com/doc/refman/5.5/en/privileges-provided.html#priv_trigger

Le privilège TRIGGER active les opérations de déclenchement. Vous devez disposer de ce privilège pour qu'une table crée, supprime ou exécute des déclencheurs pour cette table.

8
Emilio Nicolás

J'ai constaté que, parfois, si l'utilisateur VIEW DEFINER n'existe pas, le vidage échoue.

Changez-le, comme décrit

1
BaZZiliO

En plus de Jannes answer, lorsque vous utilisez mysqldump avec l'option --tab (génère un fichier texte séparé par des tabulations pour chaque table vidée), votre utilisateur MySQL doit être autorisé le privilège FILE également:

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

Référence officielle de la documentation: https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_tab

Mentionné dans cette section:

Cette option ne devrait être utilisée que lorsque mysqldump est exécuté sur le même fichier machine en tant que serveur mysqld. Parce que le serveur crée des fichiers * .txt dans le répertoire que vous spécifiez, le répertoire doit être accessible en écriture pour le serveur et le compte MySQL que vous utilisez doivent avoir le FICHIER privilège. Parce que mysqldump crée * .sql dans le même répertoire, il doit être accessible en écriture pour votre compte de connexion système.

0
Rotem Ad