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 elSUPER
privilegio, y los usuarios que invocan (acceden) al objeto tendrán temporalmente los derechos de eseDEFINER
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;
.