Sì, in base alla progettazione, un cursore può comportarsi in modo diverso dallo stesso SELECT
la query potrebbe comportarsi se fosse eseguita dall'utente che ha chiamato la procedura.
Se non specifichi un DEFINER
quando crei un programma memorizzato (proc, funzione, trigger o evento) o una vista, l'oggetto, quando si accede, viene eseguito con i privilegi dell'utente che lo ha definito originariamente, non dell'utente che lo ha invocato.
Hai tre opzioni, qui:
- Verifica o eventualmente modifica i permessi del
DEFINER
corrente utente se del caso; o, - Specifica un
DEFINER
diverso utente quando si definisce il programma o la vista archiviati... è possibile farlo purché tu (la persona che crea l'oggetto) abbia ilSUPER
privilegio e gli utenti che invocano (accedono) all'oggetto avranno temporaneamente i diritti di quelDEFINER
utente invece; o, - Aggiungi
SQL SECURITY INVOKER
alla definizione di procedure, funzioni e viste (sebbene non trigger o eventi), facendo sì che l'oggetto venga eseguito con i privilegi dell'utente che lo ha invocato, invece del definer, che è il comportamento predefinito.
Per vedere le autorizzazioni che ha il definitore esistente, ad esempio se vedi DEFINER=`someguy`@`localhost`:
mysql> SHOW GRANTS FOR 'someguy'@'localhost';
Puoi trovare il definer corrente nella definizione della procedura, con SHOW CREATE PROCEDURE procedure_name;
.