Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Cursor no Mysql tem outros direitos além do usuário?


Sim, por design, um cursor pode se comportar de maneira diferente do mesmo SELECT query poderia se comportar se fosse executada pelo usuário que chamou o procedimento.

Se você não especificar um DEFINER quando você cria um programa armazenado (proc, função, gatilho ou evento) ou uma visualização, o objeto, quando acessado, é executado com os privilégios do usuário que o definiu originalmente, não do usuário que o invocou.

Você tem três opções, aqui:
  • Verifique ou possivelmente modifique as permissões do DEFINER atual usuário, se apropriado; ou,
  • Especifique um DEFINER diferente usuário ao definir o programa ou visualização armazenado... você pode fazer isso desde que você (a pessoa que cria o objeto) tenha o SUPER privilégio, e os usuários que invocam (acessam) o objeto terão temporariamente os direitos desse DEFINER usuário em vez disso; ou,
  • Adicionar SQL SECURITY INVOKER para a definição de procedimentos, funções e visualizações (embora não gatilhos ou eventos), fazendo com que o objeto seja executado com os privilégios do usuário que o invocou, em vez do definidor, que é o comportamento padrão.

Para ver as permissões que o definidor existente tem, por exemplo, se você ver DEFINER=`someguy`@`localhost`:
mysql> SHOW GRANTS FOR 'someguy'@'localhost';

Você pode encontrar o definidor atual na definição do procedimento, com SHOW CREATE PROCEDURE procedure_name; .