これは通常、そのオブジェクトを作成したユーザーが存在しなくなったために、あるデータベースまたはサーバーから別のデータベースまたはサーバーにビュー/トリガー/プロシージャをエクスポートするときに発生します。
2つのオプションがあります:
1。 DEFINERを変更する
これは、データベースオブジェクトを最初にインポートするときに、DEFINER
を削除することで、おそらく最も簡単に実行できます。 ダンプからのステートメント。
後で定義者を変更するのは少し注意が必要です:
ビューの定義者を変更する方法>
-
このSQLを実行して、必要なALTERステートメントを生成します
SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", table_name, " AS ", view_definition, ";") FROM information_schema.views WHERE table_schema='your-database-name';
-
ALTERステートメントをコピーして実行します
ストアドプロシージャの定義を変更する方法
例:
UPDATE `mysql`.`proc` p SET definer = '[email protected]%' WHERE definer='[email protected]%'
これにより、すべてのデータベースのすべての定義者が変更されるため、注意してください。
2。行方不明のユーザーを作成する
MySQLデータベースの使用中に次のエラーが見つかった場合:
The user specified as a definer ('someuser'@'%') does not exist`
次に、次を使用して解決できます:
GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password'; FLUSH PRIVILEGES;
http://wwwから.lynnnayko.com / 2010/07 / mysql-user-specific-as-definer-root.html
これは魅力のように機能しました。変更する必要があるのはsomeuser
だけです。 行方不明のユーザーの名前に。ローカル開発サーバーでは、通常、root
を使用するだけです。 。
また、実際にユーザーにALL
を付与する必要があるかどうかも検討してください。 権限または彼らがより少ないものでできるかどうか。