mysql.db表上Execute_priv的含义

mysql.db表上Execute_priv的含义,mysql,grant,Mysql,Grant,我在mysql服务器上创建了“restriceduser”用户,该用户被“锁定”。对于该帐户的所有特权,mysql.user表都有一个N。mysql.db表只有Y表示选择、插入、更新、删除、创建、删除;该帐户的所有其他权限均为N。我试图创建一个存储过程,然后授予他只运行该过程的权限,而不运行其他过程,但它不起作用 用户收到:错误:对例程“mydb.functionname”的用户“restricteduser”@“%”执行命令被拒绝 存储过程: CREATE DEFINER = 'restric

我在mysql服务器上创建了“restriceduser”用户,该用户被“锁定”。对于该帐户的所有特权,mysql.user表都有一个N。mysql.db表只有Y表示选择、插入、更新、删除、创建、删除;该帐户的所有其他权限均为N。我试图创建一个存储过程,然后授予他只运行该过程的权限,而不运行其他过程,但它不起作用

用户收到:错误:对例程“mydb.functionname”的用户“restricteduser”@“%”执行命令被拒绝

存储过程:

CREATE DEFINER = 'restriceduser'@'%' FUNCTION `functionname`(sIn MEDIUMTEXT, sformat MEDIUMTEXT)
RETURNS int(11)
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
....
END;
我尝试过的格兰特声明:

GRANT EXECUTE ON PROCEDURE mydb.functionname TO 'restricteduser'@'%';
我可以通过修改他的mysql.db条目来解决这个问题

update mysql.db set execute_priv='Y' where user='restricteduser'
这似乎比我想要的更多,因为它为他打开了运行该数据库中任何存储过程的权限,而我只希望他拥有运行指定函数的权限


有人看到我的问题所在了吗?

您创建的受限用户的用户表
将需要执行_priv='Y'。此授权将取代db授权。

用户表绝对不应具有execute_priv='Y'。关键是要缩小访问范围,而不是扩大访问范围。我看到一个procs_priv表,它大概是这个访问应该出现的地方,而不是在user或db表中。我还没有设置这种类型的东西,但是grant语法看起来似乎是合理的。我猜“restricteduser”@“%”与db表中用于验证用户连接的条目不一致?