Mysql 如何向用户授予在特定存储过程上执行的权限

Mysql 如何向用户授予在特定存储过程上执行的权限,mysql,stored-procedures,grant,Mysql,Stored Procedures,Grant,我已经在特定的模式上创建了一些存储过程 在这个存储过程中,我想授予execute特权 所以我写道: GRANT EXECUTE ON PROCEDURE schema_name.proc_name TO 'user_name'; GRANT SELECT ON mysql.proc to 'user_name'; 问题是:我的用户可以看到每个存储过程。 我希望他只能看到他有执行特权的程序 有没有办法做到这一点 提前谢谢。是的。。。如果您不直接或间接地向用户授予mysql.proc表上的SELE

我已经在特定的模式上创建了一些存储过程

在这个存储过程中,我想授予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
也会阻止用户通过
信息模式.routines
伪表查看他们无权访问的过程

您不需要
在mysql.proc上授予SELECT以允许用户执行过程或函数。。。如果你这样做了,那么这似乎就是问题所在。

问题解决了

事实上,为了能够在MySQLForExcel中执行存储过程,我们需要设置希望由MySQLForExcel用户调用的每个存储过程的定义器

DELIMITER $$

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


谢谢你的帮助。

事实上,似乎是我的插件导致了这个问题。我使用MySQLForExcel允许用户与数据库交互。你说得对,如果不在mysql.proc上选择,我可以毫无问题地调用我的存储过程。但是MySQLForExcel由于一些模糊的原因不允许它。。。无法检索例程“truncate\u t\u qcms\u lead\u engineer”的存储过程元数据。为该用户向mysql.proc授予SELECT权限,或者在连接字符串中使用“check parameters=false”。实际上,这样做的原因是错误的,可能会带来安全隐患。正确的解决方案可能出现在原始错误消息中:您需要ODBC连接字符串中的CheckParameters=false来禁用导致错误的ODBC中的中断。