行级安全性,模糊引用

时间:2017-10-09 03:44:55

标签: postgresql row-level-security

我试图在postgres中创建一个导致column reference "person_id" is ambiguous的策略。

为了制作一个类似的小例子,让我们描述3个表:person,group和group_member。

人有:身份证,姓名
组具有:id,person_id和名称
小组成员有:id,person_id,group_id

我简化了我的政策,但相关部分看起来像这样:

CREATE POLICY insert_group_member ON public."group" FOR INSERT TO user_role WITH CHECK (
  EXISTS (
    SELECT * FROM "group" AS g
      LEFT JOIN "group_member" AS gm ON
        g.person_id = gm.person_id
        AND g.id = gm.group_id
      WHERE
        g.id = id AND
        gm.person_id = person_id AND
        g.members_can_invite = TRUE
  )
);
在这种情况下,

person_id可以从子选择中引用group.person_id或group_member.person_id,但我真正希望它是来自" with check"的person_id。这通常适用于其他地方。

问题:有没有办法明确指定person_id列来自策略,而不是来自select或join。注意:我预计表名的别名可以解决这个问题,但似乎没有。

1 个答案:

答案 0 :(得分:2)

您应该限定所有列引用,如下所示:

...
WHERE g.id = "group".id
  AND gm.person_id = "group".person_id