web-dev-qa-db-ja.com

完全なスキーマをダンプするためにmysqldumpが必要とする最小GRANT? (トリガーがありません!!)

次の権限を持つdumpというMySQLユーザーがいます。

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

dumpユーザーを使用して、すべてのデータ(トリガーとプロシージャを含む)をダンプします。次の方法でmysqldumpを呼び出します。

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

トリガー、それらが欠落している !!を除いて、ダンプされたファイルではすべて問題ありません

rootMySQLユーザーでmysqldumpを試行すると、トリガーが正しくダンプされます。

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

だから、私はそれがpermsの問題だと思います... extra grants mydumpMySQLユーザーは完全なダンプを正しく行うために必要です?

71
Emilio Nicolás

完全なダンプでVIEWsとEVENTsを意味すると仮定すると、以下が必要になります:

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

関数を実行するVIEWsがある場合、残念ながらEXECUTEも必要です。

私自身の問題は、データなしのダンプのみを作成したいのにSELECTが必要なのはなぜですか?

102
Jannes

必要な追加の補助金が見つかりました!!

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

ここに公式ドキュメントのリファレンスがあります: http://dev.mysql.com/doc/refman/5.5/en/privileges-provided.html#priv_trigger

TRIGGER特権は、トリガー操作を有効にします。そのテーブルのトリガーを作成、ドロップ、または実行するには、テーブルのこの権限が必要です。

8
Emilio Nicolás

VIEW DEFINERユーザーが存在しない場合、いつかダンプが失敗することがわかりました。

説明に従って変更します there

1
BaZZiliO

Jannes answerに加えて、-tabオプションでmysqldumpを使用する場合(ダンプごとにタブ区切りテキストファイルを生成テーブル)、MySQLユーザーにもFILE特権が付与されている必要があります

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

公式ドキュメントリファレンス: https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_tab

このセクションで言及:

このオプションは、mysqldumpがmysqldサーバーと同じマシンで実行されている場合にのみ使用してください。サーバーは指定したディレクトリに* .txtファイルを作成するため、ディレクトリはサーバーによって書き込み可能でなければならず、使用するMySQLアカウントにはFILE権限が必要です。 mysqldumpは同じディレクトリに* .sqlを作成するため、システムログインアカウントで書き込み可能でなければなりません。

0
Rotem Ad