PostgreSQL如何授予用户在架构中执行功能的权限

时间:2018-10-08 19:54:58

标签: sql postgresql

我有一个名为schema.func的函数,我想向用户授予执行schema.func的权限。

我尝试使用

GRANT EXECUTE ON schema.func to my_user;

,但是它不起作用。当我执行此功能时,它将引发错误:

  

模式ex的权限被拒绝

我知道我可以使用GRANT USAGE ON SCHEMA,但这不是我想要的,我只需要特定功能的权限,而不是架构中的所有功能。

我可以这样做吗?

1 个答案:

答案 0 :(得分:2)

首先,您应允许my_user访问其他模式:

GRANT USAGE ON SCHEMA my_schema TO my_user;

这允许执行功能,但不能访问表。因此,如果my_user执行函数,并且函数访问my_schema中的表等,它仍然会产生访问错误。为避免这种情况,您可以将函数定义为security definer

ALTER FUNCTION my_schema.my_function(...) SECURITY DEFINER SET search_path = public;

编辑:Writing SECURITY DEFINER Functions Safely还指出了一种向特定用户授予执行权限的方法:

REVOKE ALL ON FUNCTION my_schema.my_function(...) FROM PUBLIC;
GRANT EXECUTE ON FUNCTION my_schema.my_function(...) TO my_user;

也请注意本节中有关设置search_path的提示。