首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否在PostgreSQL中对函数的Execute权限不够?

是否在PostgreSQL中对函数的Execute权限不够?
EN

Stack Overflow用户
提问于 2021-02-26 07:07:34
回答 1查看 156关注 0票数 0

从MS SQL端到Pg的新功能,要限制访问,只需将EXE权限授予函数和SP即可。因此创建了一个用户/角色,设置其search_path对数据库的专用模式,授予EXECUTE ON ALL FUNCTIONS IN SCHEMA myschema。尝试执行得到的函数

对架构myschema的权限被拒绝

好的,grant usage on schema myschema to role。该函数执行select ... from mytable所以现在

表mytable的权限被拒绝

grant SELECT on my table什么?等等,此函数的目的是限制角色探查表。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-26 10:52:09

您的情况是:用户a拥有一张桌子mytable在模式中myschema。用户b最初对任何一个都没有权限。现在您想要允许b有限的访问权限mytable。授予SELECT表上的权限可能太多了--您只想通过一个特殊的函数授予访问权限myfunction

然后,您需要一个不以调用者权限运行的函数(SECURITY INVOKER),这将是默认设置,但需要拥有函数所有者的权限(SECURITY DEFINER)。然后是用户a应运行:

代码语言:javascript
运行
复制
CREATE FUNCTION public.read_mytable(...) RETURNS ...
   LANGUAGE ...
   /* runs with the privileges of the owner */
   SECURITY DEFINER
   /* important: force "search_path" to a fixed order */
   SET search_path = pg_catalog,pg_temp
AS $$...$$;

/* by default, everybody can execute a function */
REVOKE EXECUTE ON FUNCTION public.read_mytable FROM PUBLIC;
GRANT EXECUTE ON FUNCTION public.read_mytable TO b;

请注意,我在模式中创建了函数public,对其b拥有访问权限(不要忘记REVOKE CREATE ON SCHEMA public FROM PUBLIC;!)。

设置search_path对于用户b是不够的,因为这总是可以用SET命令。你不会想b运行权限提升attack..。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66377833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档