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
DEFINER
uživatel, pokud je to vhodné; nebo, - Zadejte jiný
DEFINER
uživatel při definování uloženého programu nebo pohledu... můžete to udělat, pokud vy (osoba vytvářející objekt) máteSUPER
oprávnění a uživatelé vyvolávající (přistupující) k objektu budou mít dočasně práva tohotoDEFINER
místo toho uživatel; nebo, - Přidejte
SQL SECURITY INVOKER
k 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;
.