sql - postgresql如何向用户授予在架构中执行功能的权限

标签 sql postgresql

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

我尝试使用

GRANT EXECUTE ON schema.func to my_user;

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

permission denied for schema ex

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

我可以这样做吗?

最佳答案

首先,您应该允许 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 的提示。

关于sql - postgresql如何向用户授予在架构中执行功能的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52709231/

相关文章:

mysql - 具有内连接、子选择和限制的 SQL 选择

mysql - 使用MYSQL计算同一列中多个日期之间的时间

mysql - 连接两个表的问题

sql - 如何在配置单元中选择计数和文字值

postgresql - 为 postgresql 全文搜索添加新语言

sql - 什么是优化查找子字符串匹配的 Oracle 查询的好方法?

java - 如何在注解@CreatedDate 中设置默认日期?

ruby-on-rails - Postgresql WHERE 子句添加 '' 左右?

Postgresql 对国家字符数据类型的支持

Postgresql 监听/通知回顾