20

mysqldumpを使用して、特定のマシンのアカウント間でデータベースを複製しています。定義されたビューに到達する場合を除いて、すべてがうまく機能します。ダンプには次のような行が含まれているため...

/*!50013 DEFINER=`user_a`@`localhost` SQL SECURITY DEFINER */

... user_bのmysqlにダンプをロードすると、エラーが発生します。

ERROR 1227 (42000) at line 657: Access denied; you need the SUPER privilege for this operation

言うまでもなく、私はこのmysqlインスタンスに対するSUPER特権を持っていません。ユーザーに依存しない方法でビューをダンプするようにmysqldumpを説得する方法はありますか?この点については、マニュアルに何も見つかりません。ユーザー名を置き換えるために、実際にダンプファイルを解析する必要がありますか?それとも私は何かが足りないのですか?

4

4 に答える 4

27

同じ問題。私はそれをそのように解決しました:

mysqldump -uuser1 -ppassword1 database1 > backup.sql

sed '/^\/\*\!50013 DEFINER/d' backup.sql > backup_without_50013.sql

mysql -u user2 -ppassword2 -D database2 < backup_without_50013.sql

興味深いのは、/*!50013 で始まるすべての行を削除するsedコマンドです。

ハイディ

于 2008-11-24T10:43:28.087 に答える
12

バックアップファイルを処理し、DEFINERを変更する必要があります。

DEFINER = user_a@localhost

私はそれをに変更するのが好きです:

DEFINER = CURRENT_USER

その後、それをロードするアカウントに自動的に関連付けられます。

于 2009-12-18T22:22:15.177 に答える
2

SQL SECURITY 句は、ビューのアクセス権限をチェックするときにどの MySQL アカウントを使用するかを決定します (おそらくご存知のとおり)。

ビューを作成するときに、そのビューのセキュリティに関するいくつかのオプションを定義できます。ここで詳細を読むことができますが、基本的にデフォルトでは、アクセスはビューの「定義者」、つまりビューを作成したユーザーに制限されています。

于 2008-09-30T19:28:41.103 に答える
0

mysqldumpオプションで実行"--skip-triggers"

于 2009-11-17T19:24:56.613 に答える