从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什么?等等,此函数的目的是限制角色探查表。
发布于 2021-02-26 10:52:09
您的情况是:用户a拥有一张桌子mytable在模式中myschema。用户b最初对任何一个都没有权限。现在您想要允许b有限的访问权限mytable。授予SELECT表上的权限可能太多了--您只想通过一个特殊的函数授予访问权限myfunction。
然后,您需要一个不以调用者权限运行的函数(SECURITY INVOKER),这将是默认设置,但需要拥有函数所有者的权限(SECURITY DEFINER)。然后是用户a应运行:
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..。
https://stackoverflow.com/questions/66377833
复制相似问题