【问题标题】:Applying a row-level-security policy on a view [duplicate]在视图上应用行级安全策略[重复]
【发布时间】:2023-01-23 17:27:05
【问题描述】:

我对整个 Supabase 有点陌生。我正在尝试将策略应用于我创建的视图。我不确定这是否可能,但我不明白为什么不可能。由于 Supabase 方面,我不认为这个问题与这个 question 重复。

我尝试使用以下 example 但我没有使用表,而是使用了视图。

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,这当然是正确的。问题是:是否有正确的方法对视图应用策略?如果有,这看起来会怎样?

【问题讨论】:

    标签: postgresql view row-level-security supabase


    【解决方案1】:

    使用 v15 后可用视图的 security_invoker 选项很容易做到这一点。这将使 PostgreSQL 作为使用视图的用户检查基础表的权限,并为用户使用行级安全策略。

    the documentation的话来说:

    如果视图将 security_invoker 属性设置为 true,则对底层基本关系的访问权限由执行查询的用户而非视图所有者的权限决定。因此,安全调用者视图的用户必须对该视图及其底层基本关系具有相关权限。

    如果任何底层基础关系是安全调用者视图,它将被视为直接从原始查询访问。因此,安全调用者视图将始终使用当前用户的权限检查其底层基本关系,即使它是从没有 security_invoker 属性的视图访问的。

    【讨论】:

    • 对于今天和以后发现这个问题,尝试将 RSL 应用于 Supabase 中的视图的任何人,使用新版本的 Postgres v15,应用于底层表的 RSL 可以应用于视图,如果您使用以下命令创建视图:CREATE或用 (security_invoker=on) AS SELECT ... 替换视图“SomeView”;也许您需要升级您的 Supbase 项目才能获得此功能。
    猜你喜欢
    • 2020-11-19
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    • 2010-12-03
    • 2022-07-07
    相关资源
    最近更新 更多