web-dev-qa-db-ja.com

定義者の問題を修正する方法定義者として指定されたユーザー( 'fred'@'192.168.0.%')が存在しません

既存のデータベースを自分のWebサイトからラップトップの新しいMySQLセットアップにダンプしました。上記のエラーメッセージが表示された場合、ビューを使用するページ以外はすべて機能します。システムのビューは1つだけです。これは、ユーザーがシステムに存在しないために発生したと考えましたが、MySQLのユーザーデータベースを見ると、ユーザーはパスワードで正しくリストされています。

ダンプは、MySQLの以前のバージョン(5.0)から、Xamp 5.527に付属する最新のものにダンプされました。最初は、最新バージョンが既存のバージョンと互換性がないのではないかと思いました。

このフォーラムを見ると、この問題をカバーする既存の回答がいくつかあります。データベースに変更を加えてから再度ダンプすることを指します。

ただし、私のオンラインデータベースは正常に機能するため、強制終了した場合に変更を加えることはしません。これは、私が行うべき変更とその方法を理解していることを前提としています。 PHPmyadminを使用しています。既存のダンプされたデータベースで変更できますか、それともオンライン1で変更してからエクスポートする必要がありますか?

そして、それを修正するために私が何をする必要があるか正確に。元のデータベースは、MySQLに変換されたMicrosoft Accessデータベースであり、2003年以降エラーなしで機能しています。

3
user20200

この方法ですべてのビューを再作成する場合(この構文ですべての新しいビューを作成する場合):

CREATE
SQL SECURITY INVOKER
    VIEW applications
AS     
SELECT id, product_id
FROM modules     WHERE item_type='application';

データベースを復元した別のインスタンスのユーザーに、ビューに対するEXECUTEと関連するテーブルに対するSELECTの権限があることを確認するだけで済みます。

Webアプリケーションの一般的なデータベースユーザーは、Webアプリケーションがデータベースオブジェクトを作成するまで、SELECT、INSERT、UPDATE、DELETE、EXECUTEを実行します。

この場合、このデータベースユーザーがWebサイトでこのビューを作成した場合でも、データベースユーザーである必要はありません。

2
Igor Kryltsov

多くのことを考えましたが、Webフォーラムで簡単な解決策を見つけることができなかったため、次の手順を実行しました。 1.欠落しているユーザーを再作成します。 2.彼としてログオンします。 3.元のビューを作成したデータベースで選択コードを見つけます。 4.このコードを使用して新しいクエリを作成します。ビューとして保存します。これにより、定義者がusername @ localhostにログオンしているユーザーに設定されます。 (MySQL 5.5.27)5.古いビューを削除します。 6.新しいビューの名前を元のビュー名に変更します。ウェブサイトでコードを実行します-問題は解決しました。以前にこのバージョンを使用したことがないため、いくつかの試行を行いました。

0
user20200