Ano, podle návrhu se kurzor může chovat jinak než stejný SELECT dotaz se může chovat, pokud jej provedl uživatel, který proceduru zavolal.
Pokud nezadáte DEFINER když vytvoříte uložený program (proc, funkci, spouštěč nebo událost) nebo pohled, pak se objekt při přístupu spustí s oprávněními uživatele, který jej původně definoval, nikoli uživatele, který jej vyvolal.
Zde máte tři možnosti:
- Ověřte nebo případně upravte oprávnění aktuálního
DEFINERuživatel, pokud je to vhodné; nebo, - Zadejte jiný
DEFINERuživatel při definování uloženého programu nebo pohledu... můžete to udělat, pokud vy (osoba vytvářející objekt) máteSUPERoprávnění a uživatelé vyvolávající (přistupující) k objektu budou mít dočasně práva tohotoDEFINERmísto toho uživatel; nebo, - Přidejte
SQL SECURITY INVOKERk definici procedur, funkcí a pohledů (ačkoli ne spouštěčů nebo událostí), což způsobí, že objekt bude spouštět s oprávněními uživatele, který jej vyvolal, namísto definujícího, což je výchozí chování.
Chcete-li zobrazit oprávnění, která má stávající definátor, například pokud vidíte DEFINER=`someguy`@`localhost`:
mysql> SHOW GRANTS FOR 'someguy'@'localhost';
Aktuální definici naleznete v definici procedury pomocí SHOW CREATE PROCEDURE procedure_name; .