我已经在特定架构上创建了一些存储过程。
在此存储过程中,我想授予执行权限。
所以我写了:
GRANT EXECUTE ON PROCEDURE schema_name.proc_name TO 'user_name';
GRANT SELECT ON mysql.proc to 'user_name';
问题是:我的用户可以看到每个存储过程。 我希望他只能看到他拥有EXECUTE特权的程序。
有没有办法实现这个目标?
提前致谢。
答案 0 :(得分:4)
是的...如果您未直接或间接授予用户SELECT
表mysql.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 $$
感谢您的帮助。