En el prime caso, tienes que darle con GRANT los privilegios a nivel de rutina, no de tabla o bases. De ese modo, sólo podrá acceder a esa rutina.
En el segundo caso, la única solución que yo he intentado es crear SP específicos según el tipo de usuario (obviamente tengo una tabla de roles), para que pueda usar unos u otros procedimientos según pueda.
Revisa en detalle la sentencia GRANT:
13.5.1.3. Sintaxis de GRANT y REVOKE