Да, по дизайн курсорът може да се държи различно от същия SELECT
заявката може да се държи, ако е била изпълнена от потребителя, който е извикал процедурата.
Ако не посочите DEFINER
когато създавате съхранена програма (процес, функция, тригер или събитие) или изглед, тогава обектът, когато бъде достъпен, се изпълнява с привилегиите на потребителя, който първоначално го е дефинирал, а не на потребителя, който го е извикал.
Тук имате три възможности:
- Проверете или евентуално променете разрешенията на текущия
DEFINER
потребител, ако е подходящо; или, - Посочете различен
DEFINER
потребител, когато дефинирате съхранената програма или изглед... можете да направите това, стига вие (лицето, създаващо обекта) да иматеSUPER
привилегия и потребителите, извикващи (осъществяващи достъп) до обекта, временно ще имат правата на тозиDEFINER
потребител вместо; или, - Добавете
SQL SECURITY INVOKER
към дефиницията на процедури, функции и изгледи (въпреки че не тригери или събития), карайки обекта да се изпълнява с привилегиите на потребителя, който го е извикал, вместо дефинатора, което е поведението по подразбиране.
За да видите разрешенията, които има съществуващият дефинатор, например ако видите DEFINER=`someguy`@`localhost`:
mysql> SHOW GRANTS FOR 'someguy'@'localhost';
Можете да намерите текущия дефинатор в дефиницията на процедурата с SHOW CREATE PROCEDURE procedure_name;
.