如何将特定存储过程的执行授予用户

时间:2014-06-30 15:08:58

标签: mysql stored-procedures grant

我已经在特定架构上创建了一些存储过程。

在此存储过程中,我想授予执行权限。

所以我写了:

GRANT EXECUTE ON PROCEDURE schema_name.proc_name TO 'user_name';
GRANT SELECT ON mysql.proc to 'user_name';

问题是:我的用户可以看到每个存储过程。 我希望他只能看到他拥有EXECUTE特权的程序。

有没有办法实现这个目标?

提前致谢。

2 个答案:

答案 0 :(得分:4)

是的...如果您未直接或间接授予用户SELECTmysql.proc权限,例如使用GRANT SELECT ON *.* TO ...

在此表上没有SELECT权限的情况下,用户只能看到存储过程和存储函数的存在,它们具有其他权限,例如EXECUTE

在幕后,SELECT上缺少mysql.proc也会阻止用户通过information_schema.routines伪表查看他们无法访问的过程。

您不需要GRANT SELECT ON mysql.proc来启用用户执行程序或功能......如果您这样做,那么 似乎就是问题。

答案 1 :(得分:-1)

问题解决了。

实际上,为了能够在MySQLForExcel中执行存储过程,我们需要设置我们想要由MySQLForExcel用户调用的每个存储过程的DEFINER。

DELIMITER $$

DROP PROCEDURE IF EXISTS `procedure_name` $$
CREATE DEFINER=`user_mysqlforexcel` PROCEDURE `procedure_name`(param)
BEGIN
     Do smth as usual
END $$

I found that here

感谢您的帮助。