sql >> Base de Datos >  >> RDS >> Mysql

¿El cursor en Mysql tiene otros derechos además del usuario?

Sí, por diseño, un cursor puede comportarse de manera diferente al mismo SELECT la consulta podría comportarse si fuera ejecutada por el usuario que llamó al procedimiento.

Si no especifica un DEFINER cuando crea un programa almacenado (proc, función, activador o evento) o una vista, el objeto, cuando se accede a él, se ejecuta con los privilegios del usuario que lo definió originalmente, no del usuario que lo invocó.

Tienes tres opciones, aquí:

  • Verificar o posiblemente modificar los permisos del DEFINER actual usuario si corresponde; o,
  • Especifique un DEFINER diferente usuario al definir el programa almacenado o la vista... puede hacerlo siempre que usted (la persona que crea el objeto) tenga el SUPER privilegio, y los usuarios que invocan (acceden) al objeto tendrán temporalmente los derechos de ese DEFINER usuario en su lugar; o,
  • Añadir SQL SECURITY INVOKER a la definición de procedimientos, funciones y vistas (aunque no disparadores ni eventos), lo que hace que el objeto se ejecute con los privilegios del usuario que lo invocó, en lugar del definidor, que es el comportamiento predeterminado.

Para ver los permisos que tiene el definidor existente, por ejemplo, si ve DEFINER=`someguy`@`localhost`:

mysql> SHOW GRANTS FOR 'someguy'@'localhost';

Puede encontrar el definidor actual en la definición del procedimiento, con SHOW CREATE PROCEDURE procedure_name; .