¿GRANTs mínimos necesarios para mysqldump para volcar un esquema completo? (¡¡Faltan TRIGGER !!)

79

Tengo un usuario de MySQL llamado dump con los siguientes permisos:

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

Quiero volcar todos los datos (incluidos los activadores y procedimientos) usando el usuario de volcado . Llamo mysqldump de la siguiente manera:

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

Todo está bien con el archivo volcado, excepto los disparadores, ¡ faltan !

Los disparadores se descargan correctamente si intento mysqldump con el usuario root de MySQL:

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

Entonces, supongo que es un problema de permisos ... ¿Cuáles son las subvenciones adicionales que necesita mi usuario de volcado MySQL para realizar el volcado completo correctamente?

Emilio Nicolás
fuente

Respuestas:

111

Suponiendo que por volcado completo también se refiere a la VIEWsy la EVENTs, necesitaría:

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

y si tiene VIEWs que ejecutan una función, desafortunadamente también necesita EXECUTE.

Mi propio problema es: ¿por qué lo necesito SELECTsi solo quiero hacer un volcado sin datos?

Jannes
fuente
2
Para 5.5 y superior, en realidad no necesita el privilegio TRIGGER para descargar el código de activación.
bluecollarcoder
1
Estoy usando 5.5 y necesitaba el privilegio TRIGGER para volcar el código de activación.
heuri
En mi caso, parece que también necesito LOCK TABLESen la base de datos que estoy tratando de volcar ... usando5.5.49-MariaDB
0xC0000022L
1
En cuanto a @ comentario de 0xC0000022L, tablas de bloqueo o no es opcional para mysqldump, en función de sus parámetros mysqldump (parámetros relevantes son --opt, --lock-tables, --lock-all-tables, --single-transactiony las respectivas --skip-*variantes.
Torque
8

¡Encontré la SUBVENCIÓN adicional que necesitaba!

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

Aquí tienes la referencia en el documento oficial: http://dev.mysql.com/doc/refman/5.5/en/privileges-provided.html#priv_trigger

El privilegio TRIGGER habilita las operaciones de disparo. Debe tener este privilegio para que una tabla cree, elimine o ejecute desencadenadores para esa tabla.

Emilio Nicolás
fuente
3
El nombre es en realidad TRIGGER, no
TRIGGERS
Si bien esto puede ser una respuesta al problema del autor, no responde a la pregunta: "¿Cuáles son los requisitos mínimos de GRANT para hacer un volcado completo". Por un lado: faltan EVENT y SHOW VIEW.
Jannes
Para 5.5 y superior, en realidad no necesita TRIGGERprivilegios para volcar el código de activación.
bluecollarcoder
5
Yo uso 5.5 y realmente lo necesitaba
Emilio Nicolás
1

Descubrí que, en algún momento, si el usuario VIEW DEFINER no existe, el volcado falla.

Cámbielo, como se describe allí

BaZZiliO
fuente
No estoy seguro de por qué se votó en contra, resolvió mi problema. Había especificado definer como en person lugar de person@localhost. ¡Gracias!
stianlik
1

Además de la respuesta de Jannes , cuando se usa mysqldump con la opción --tab (produce un archivo de texto separado por tabuladores para cada tabla volcada ), su usuario de MySQL también debe tener el FILEprivilegio:

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

Referencia de documentos oficiales: https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_tab

Mencionado en esta sección:

Esta opción debe usarse solo cuando mysqldump se ejecuta en la misma máquina que el servidor mysqld. Debido a que el servidor crea archivos * .txt en el directorio que especifique, el servidor debe poder escribir en el directorio y la cuenta MySQL que use debe tener el privilegio FILE. Debido a que mysqldump crea * .sql en el mismo directorio, la cuenta de inicio de sesión del sistema debe poder escribirlo.

Anuncio de Rotem
fuente