postgresql 如何向用户授予在架构中执行函数的权限

s97*_*712 3 sql postgresql

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

我尝试使用

GRANT EXECUTE ON schema.func to my_user;
Run Code Online (Sandbox Code Playgroud)

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

模式 ex 的权限被拒绝

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

我可以这样做吗?

cle*_*ens 6

首先,您应该允许my_user访问其他架构:

GRANT USAGE ON SCHEMA my_schema TO my_user;
Run Code Online (Sandbox Code Playgroud)

这允许执行函数但不允许访问表。因此,如果my_user执行该函数,它仍然会产生访问错误,如果该函数访问表等my_schema。为避免这种情况,您可以将函数定义为安全定义器

ALTER FUNCTION my_schema.my_function(...) SECURITY DEFINER SET search_path = public;
Run Code Online (Sandbox Code Playgroud)

编辑:安全地编写 SECURITY DEFINER 函数还指出了一种向特定用户授予执行权限的方法:

REVOKE ALL ON FUNCTION my_schema.my_function(...) FROM PUBLIC;
GRANT EXECUTE ON FUNCTION my_schema.my_function(...) TO my_user;
Run Code Online (Sandbox Code Playgroud)

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