postgresql 对视图应用行级安全策略[重复]

mwkjh3gx  于 2023-01-25  发布在  PostgreSQL
关注(0)|答案(1)|浏览(165)
    • 此问题在此处已有答案**:

Why isn't row level security enabled for Postgres views?(3个答案)
11个月前关闭。
我对整个Supabase有点陌生。我正在尝试将一个策略应用到我创建的一个视图。我不确定这是否可能,但我不明白为什么不可能。我不认为这个问题是这个question的重复,因为Supabase方面。
我尝试使用下面的示例,但我使用的不是表,而是视图。

create policy "Team members can update team details if they belong to the team."
  on teams_view
  for select using (
    auth.uid() in (
      select user_id from members
      where team_id = id
    )
  );

不幸的是,postgresql抱怨"teams_view" is not a table,这当然是正确的,问题是:是否有一个正确的方法来实施意见政策?如果有,情况如何?

wlsrxk51

wlsrxk511#

使用v15以来可用的视图上的security_invoker选项很容易做到这一点。这将使PostgreSQL检查使用视图的用户对底层表的权限,以及对用户使用行级安全策略。
the documentation的话说:
如果视图的security_invoker属性设置为true,则对基础基本关系的访问权限由执行查询的用户的权限决定,而不是由视图所有者决定。因此,安全调用程序视图的用户必须对视图及其基础基本关系具有相关权限。
如果任何基础基本关系是安全调用程序视图,则会将其视为直接从原始查询访问的。因此,安全调用程序视图将始终使用当前用户的权限检查其基础基本关系,即使是从没有security_invoker属性的视图访问的。

相关问题