Minimalne GRANTs potrzebne mysqldump do zrzucenia pełnego schematu? (Brakuje TRIGGERów !!)


79

Mam użytkownika MySQL o nazwie dump z następującymi uprawnieniami:

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

Chcę zrzucić wszystkie dane (w tym wyzwalacze i procedury) za pomocą użytkownika zrzutu . Wywołuję mysqldump w następujący sposób:

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

Wszystko jest w porządku z zrzuconym plikiem z wyjątkiem wyzwalaczy, brakuje ich !!

Wyzwalacze są zrzucane poprawnie, jeśli spróbuję mysqldump z użytkownikiem root MySQL:

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

Więc wydaje mi się, że jest to problem z uprawnieniami ... jakie dodatkowe uprawnienia potrzebuje użytkownik MySQL dla mojego zrzutu, aby poprawnie wykonać pełny zrzut?

Odpowiedzi:


111

Zakładając, że pełny zrzut masz na myśli również VIEWs i EVENTs, potrzebujesz:

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

a jeśli masz VIEWs, które wykonują funkcję, to niestety również potrzebujesz EXECUTE.

Mój własny problem jest następujący: po co mi to, SELECTskoro chcę tylko zrobić zrzut bez danych?


2
W przypadku wersji 5.5 i nowszych faktycznie nie potrzebujesz uprawnienia TRIGGER, aby zrzucić kod wyzwalacza.
bluecollarcoder

1
Używam 5.5 i potrzebowałem uprawnienia TRIGGER, aby zrzucić kod wyzwalacza.
heuri,

W moim przypadku wygląda na to, że potrzebuję również LOCK TABLESw bazie danych próbuję się zrzucić ... używając5.5.49-MariaDB
0xC0000022L

1
Odnośnie @ komentarzu 0xC0000022L, Stoły blokowania lub nie jest obowiązkowe dla mysqldump, w zależności od parametrów mysqldump (odpowiednie parametry --opt, --lock-tables, --lock-all-tables, --single-transactioni poszczególne --skip-*warianty.
Moment obrotowy

8

Znalazłem dodatkową dotację, której potrzebowałem !!

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

Tutaj masz odniesienie do oficjalnego dokumentu: http://dev.mysql.com/doc/refman/5.5/en/privileges-provided.html#priv_trigger

Uprawnienie TRIGGER umożliwia wykonywanie operacji wyzwalania. Musisz mieć to uprawnienie, aby tabela mogła tworzyć, usuwać lub wykonywać wyzwalacze dla tej tabeli.


3
W rzeczywistości nazwa to TRIGGER, a nie
TRIGGERS

Choć może to być odpowiedzią na problem autora, nie odpowiada na pytanie: „jakie są minimalne wymagania GRANT-u, aby wykonać pełny zrzut”. Po pierwsze: brakuje EVENT i SHOW VIEW.
Jannes

W przypadku wersji 5.5 i nowszych w rzeczywistości nie potrzebujesz TRIGGERuprawnień do zrzucenia kodu wyzwalacza.
bluecollarcoder

5
Używam 5.5 i faktycznie tego potrzebowałem
Emilio Nicolás

1

Odkryłem, że czasami, jeśli użytkownik VIEW DEFINER nie istnieje, zrzut się nie powiedzie.

Zmień to, jak tam opisano


Nie jestem pewien, dlaczego głosowano w dół, rozwiązałem mój problem. Podałem definer jako person zamiast person@localhost. Dzięki!
stianlik

1

Oprócz Jannes odpowiedź, przy użyciu mysqldump z --tab opcji (produkuje plik tekstowy kartę rozdzielone dla każdej tabeli dumpingowych), twój użytkownik MySQL musi być udzielone na FILEprzywilej, a także:

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

Odniesienie do oficjalnej dokumentacji: https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_tab

Wspomniane w tej sekcji:

Tej opcji należy używać tylko wtedy, gdy mysqldump działa na tej samej maszynie, co serwer mysqld. Ponieważ serwer tworzy pliki * .txt w określonym katalogu, serwer musi mieć możliwość zapisu w katalogu, a konto MySQL, którego używasz, musi mieć uprawnienie PLIK. Ponieważ mysqldump tworzy * .sql w tym samym katalogu, musi mieć możliwość zapisu na koncie logowania do systemu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.