向另一个用户授予执行函数权限

Sha*_*yar 2 mysql stored-procedures grant database-permissions

我有一个数据库功能fn_relation_isModerator,只有用户api可以访问这个功能。现在我希望另一个用户拥有此权限(同时保留以前的权限)

我通过以下查询检查了例程名称和用户:

select routine_name, routine_type, definer from information_schema.ROUTINES where ROUTINE_SCHEMA = 'db_name';
Run Code Online (Sandbox Code Playgroud)

结果:

+-------------------------+---------------+----------+
|      ROUTINE_NAME       |  ROUTINE_TYPE |  DEFINER |
+-------------------------+---------------+----------+
|                         |               |          |
| fn_relation_isModerator |  FUNCTION     |  api@%   |
+-------------------------+---------------+----------+
Run Code Online (Sandbox Code Playgroud)

方法一:

因此,我运行以下查询以授予此权限:

GRANT EXECUTE ON PROCEDURE db_name.fn_relation_isModerator TO 'api_worker'@'%';
Run Code Online (Sandbox Code Playgroud)

但它导致了以下错误:

错误代码:1305。 PROCEDURE fn_relation_isModerator 不存在

方法二:

询问:

GRANT EXECUTE ON FUNCTION `db_name`.`fn_relation_isModerator` TO 'api_worker'@'%';
Run Code Online (Sandbox Code Playgroud)

错误

错误代码:1133。在用户表中找不到任何匹配的行

方法三:

询问:

GRANT EXECUTE ON `db_name`.`fn_relation_isModerator` TO 'api_worker'@'%';
Run Code Online (Sandbox Code Playgroud)

错误:

错误代码:1144。非法的 GRANT/REVOKE 命令;请查阅手册以了解可以使用哪些权限

rev*_*evo 5

您必须在function(方法 2)上使用授权执行:

GRANT EXECUTE ON FUNCTION `db_name`.`fn_relation_isModerator` TO 'api_workers'@'%';
Run Code Online (Sandbox Code Playgroud)

正如OP在评论中解释说,有用户一个错字,它应该是api_workers代替api_worker

由于使用了不存在的用户,所有方法都失败了。