我在一个特定的模式上创建了一些存储过程。
在这个存储过程中,我想授予execute特权。
所以我写下了:
GRANT EXECUTE ON PROCEDURE schema_name.proc_name TO 'user_name';
GRANT SELECT ON mysql.proc to 'user_name';问题是:我的用户可以看到每个存储过程。我希望他只能看到他拥有EXECUTE特权的过程。
有没有办法做到这一点?
提前谢谢。
发布于 2014-07-01 09:06:22
是的..。如果您没有直接或间接地授予用户对mysql.proc表的SELECT权限(例如使用GRANT SELECT ON *.* TO ... ),则此操作将按预期工作
如果没有对该表的SELECT权限,则用户只能看到他们具有其他权限(如EXECUTE )的存储过程和存储函数的存在。
在幕后,mysql.proc上缺少SELECT也阻止了用户通过information_schema.routines伪表查看他们无权访问的过程。
您不应该需要使用GRANT SELECT ON mysql.proc来使用户能够执行过程或函数...如果你这样做了,那么这似乎就是问题所在。
发布于 2014-07-01 15:48:45
问题解决了。
实际上,为了能够在MySQLForExcel中执行存储过程,我们需要设置希望由MySQLForExcel用户调用的每个存储过程的定义器。
DELIMITER $$
DROP PROCEDURE IF EXISTS `procedure_name` $$
CREATE DEFINER=`user_mysqlforexcel` PROCEDURE `procedure_name`(param)
BEGIN
Do smth as usual
END $$谢谢你的帮助。
https://stackoverflow.com/questions/24493288
复制相似问题