Sí... esto funciona como se esperaba si no otorga al usuario SELECT
privilegio en mysql.proc
tabla, ya sea directa o indirectamente, como con GRANT SELECT ON *.* TO ...
Sin SELECT
permiso en esta tabla, un usuario solo puede ver la existencia de procedimientos almacenados y funciones almacenadas donde tiene otros permisos, como EXECUTE
.
Bajo el capó, la falta de SELECT
en mysql.proc
también evita que el usuario vea los procedimientos a los que no tiene acceso a través de information_schema.routines
pseudo-tabla.
No debería necesitar GRANT SELECT ON mysql.proc
para permitir que el usuario ejecute procedimientos o funciones... y si lo hace, entonces eso parece la pregunta.