はい、設計上、カーソルは同じSELECT
とは異なる動作をする可能性があります プロシージャを呼び出したユーザーによってクエリが実行された場合、クエリは動作する可能性があります。
DEFINER
を指定しない場合 ストアドプログラム(proc、function、trigger、またはevent)またはビューを作成すると、オブジェクトにアクセスすると、オブジェクトを呼び出したユーザーではなく、最初に定義したユーザーの権限で実行されます。
ここには3つのオプションがあります:
- 現在の
DEFINER
の権限を確認または変更する可能性があります 必要に応じてユーザー。または、 - 別の
DEFINER
を指定します ストアドプログラムまたはビューを定義するときのユーザー...あなた(オブジェクトを作成する人)がSUPER
を持っている限り、これを行うことができます 特権、およびオブジェクトを呼び出す(アクセスする)ユーザーは、一時的にそのDEFINER
の権限を持ちます 代わりにユーザー。または、 -
SQL SECURITY INVOKER
プロシージャ、関数、およびビューの定義(トリガーやイベントではありません)により、デフォルトの動作であるdefinerではなく、オブジェクトを呼び出したユーザーの権限でオブジェクトが実行されます。
たとえば、DEFINER =`someguy` @` localhost`:
が表示されている場合、既存の定義者が持っている権限を確認します。mysql> SHOW GRANTS FOR 'someguy'@'localhost';
現在の定義者は、SHOW CREATE PROCEDURE procedure_name;
を使用してプロシージャの定義で見つけることができます。 。