sql >> Databáze >  >> RDS >> Mysql

Má kurzor v Mysql jiná práva než uživatel?

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áte SUPER oprávnění a uživatelé vyvolávající (přistupující) k objektu budou mít dočasně práva tohoto DEFINER 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; .




  1. Nejlepší způsob, jak číst CSV v Ruby. Rychlejší CSV?

  2. Tabulka vytvořená v proceduře je zrušena, dochází k chybě kompilace pro proceduru

  3. Jak vytvořit formulář z tabulky v Accessu 2016

  4. MySQL dotazujte dvě různé podmínky pro různý počet v 1 dotazu