我在特定的模式下创建了一些存储过程。
在这些存储过程中,我想要授予执行权限。
因此我编写了以下代码:
GRANT EXECUTE ON PROCEDURE schema_name.proc_name TO 'user_name';
GRANT SELECT ON mysql.proc to 'user_name';
问题是:我的用户可以看到所有存储过程。 我希望他只能看到他拥有EXECUTE权限的存储过程。 有什么方法可以实现吗? 先谢谢了。
我在特定的模式下创建了一些存储过程。
在这些存储过程中,我想要授予执行权限。
因此我编写了以下代码:
GRANT EXECUTE ON PROCEDURE schema_name.proc_name TO 'user_name';
GRANT SELECT ON mysql.proc to 'user_name';
如果您不直接或间接地授予用户对mysql.proc
表的SELECT
权限(例如使用GRANT SELECT ON *.* TO ...
),则此方法可以按预期工作。
没有对此表的SELECT
权限,用户只能看到他们拥有其他权限(如EXECUTE
)的存储过程和存储函数的存在。
在幕后,缺少对mysql.proc
的SELECT
权限还会防止用户通过information_schema.routines
伪表查看他们无权访问的过程。
您不应该需要GRANT SELECT ON mysql.proc
来使用户能够执行过程或函数...如果您这样做了,那么问题就出在那里。
问题已解决。
实际上,为了能够在MySQLForExcel中执行存储过程,我们需要设置每个存储过程的定义者,以便MySQLForExcel用户调用。
DELIMITER $$
DROP PROCEDURE IF EXISTS `procedure_name` $$
CREATE DEFINER=`user_mysqlforexcel` PROCEDURE `procedure_name`(param)
BEGIN
Do smth as usual
END $$
谢谢帮助。