Tak, z założenia kursor może zachowywać się inaczej niż ten sam SELECT
zapytanie może się zachowywać, jeśli zostało wykonane przez użytkownika, który wywołał procedurę.
Jeśli nie określisz DEFINER
kiedy tworzysz program przechowywany (proc, funkcja, wyzwalacz lub zdarzenie) lub widok, obiekt, po uzyskaniu dostępu, działa z uprawnieniami użytkownika, który go pierwotnie zdefiniował, a nie użytkownika, który go wywołał.
Masz trzy opcje, tutaj:
- Zweryfikuj lub ewentualnie zmodyfikuj uprawnienia bieżącego
DEFINER
użytkownik, w stosownych przypadkach; lub, - Określ inny
DEFINER
użytkownik podczas definiowania zapisanego programu lub widoku... możesz to zrobić tak długo, jak ty (osoba tworząca obiekt) maszSUPER
uprawnienia, a użytkownicy wywołujący (uzyskujący dostęp) obiekt tymczasowo będą mieli prawa tegoDEFINER
zamiast tego użytkownik; lub, - Dodaj
SQL SECURITY INVOKER
do definicji procedur, funkcji i widoków (ale nie wyzwalaczy ani zdarzeń), powodując, że obiekt działa z uprawnieniami użytkownika, który go wywołał, zamiast definiującego, co jest zachowaniem domyślnym.
Aby zobaczyć uprawnienia istniejącej osoby definiującej, na przykład, jeśli widzisz DEFINER=`jakiś facet`@`localhost`:
mysql> SHOW GRANTS FOR 'someguy'@'localhost';
Bieżący definiujący można znaleźć w definicji procedury za pomocą SHOW CREATE PROCEDURE procedure_name;
.