Mysql
 sql >> Database >  >> RDS >> Mysql

Il cursore in Mysql ha altri diritti rispetto all'utente?

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 il SUPER privilegio e gli utenti che invocano (accedono) all'oggetto avranno temporaneamente i diritti di quel DEFINER 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; .