この記事では、 DEFINERの場合に発生する可能性のある問題のトラブルシューティング方法について説明します。 属性は、MySQLのストアドオブジェクト(ビュー、トリガー、関数、およびストアドプロシージャ)で使用されます。
MySQLのストアドオブジェクト(ビュー、トリガー、関数、およびストアドプロシージャ)の表示または実行で問題が発生する場合があります。たとえば、phpMyAdminで次のエラーメッセージが表示される場合があります。
Error in processing request: No routine with name 'example' found in database 'example_db'. You might be lacking the necessary privileges to edit this routine.
または、Webサイトの操作中に一見ランダムなエラーが発生したり、データベース機能が失われたりする場合があります。
DEFINER 属性は、特定の保存されたオブジェクトにアクセスできるMySQLユーザーアカウントを指定するために使用されます。ただし、 DEFINERのMySQLユーザーアカウントで問題が発生する可能性があります 属性が現在ログインしているMySQLユーザーと一致しません。たとえば、これはcPanelのphpMyAdminを使用している場合に発生する可能性があります。この場合、ユーザー定義のデータベースユーザーとしてではなく、常にプライマリアカウント(cPanel)ユーザーとしてログインします。
同様に、この問題は、 DEFINER の場合、サイトの移行後に発生する可能性があります データベース内の属性は、新しいホスティング環境のデータベースユーザーで更新されません。
この問題を解決するには、 DEFINERで参照されているデータベースユーザーとしてデータベースにログインしてみてください。 属性。 (正しいデータベースユーザーを判別するには、データベースをダンプして DEFINERを調べる必要がある場合があります。 属性。)さまざまなデータベースユーザーとしてログインする方法はいくつかあります。
方法#1:MySQLクライアントアプリケーションを使用する
MySQL WorkbenchなどのMySQLクライアントアプリケーションを使用して、正しいデータベースユーザーとしてデータベースにログインできます。これで、正しいIDを使用して、保存されたオブジェクトを編集および実行できるようになります。 MySQLクライアントアプリケーションを使用してデータベースに接続する方法については、この記事を参照してください。
方法#2:「mysql」コマンドラインプログラムを使用する
または、 mysqlを使用することもできます 正しいデータベースユーザーとしてデータベースにログインするためのコマンドラインプログラム。これで、正しいIDを使用して、保存されたオブジェクトを編集および実行できるようになります。 mysqlの使用方法については コモンラインプログラムについては、こちらの記事をご覧ください。
方法#3:phpMyAdminのカスタムインストールを使用する
MySQLクライアントアプリケーションまたはコマンドラインを使用したくない場合は、ホスティングアカウントにスタンドアロンのphpMyAdminインストールを作成できます。このカスタムインストールにより、プライマリアカウント(cPanel)ユーザーとしてではなく、正しいデータベースユーザーとしてデータベースにログインできます。カスタムphpMyAdminインストールを作成する方法については、この記事を参照してください。
DEFINERで参照されているデータベースユーザーとしてデータベースにログインできない場合があります 属性。たとえば、別のホスティングプロバイダーから移行されたサイトでは、MySQLの命名規則が異なり、正しい名前のデータベースユーザーを作成できない場合があります。この場合、次のことを行う必要があります。
- データベース全体をファイルにダンプします。これを行う方法については、この記事を参照してください。
- お好みのテキストエディタを使用して、 DEFINERを手動で更新します 制御するデータベースユーザーを参照するための属性。
- 変更したデータベースをアカウントにインポートします。これを行う方法については、この記事を参照してください。
- 新しいデータベースをテストします。これで、正しいIDを使用して保存されたオブジェクトを編集および実行できるようになります。
定義者の詳細については、https://dev.mysql.com/doc/refman/8.0/en/stored-objects-security.htmlにアクセスしてください。