行级安全性,引用不明确
Row Level Security, Ambiguous Reference
我正在尝试在 postgres 中创建一个导致 column reference "person_id" is ambiguous
的策略。
为了制作一个类似的小例子,让我们描述 3 tables:人、组和 group_member。
此人有:身份证、姓名
群组有:id、person_id 和 name
群组成员有: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在这种情况下可以从子select引用group.person_id或group_member.person_id,但我真正想要的是person_id 来自 "with check"。这通常适用于其他地方。
问题:有没有办法明确指定 person_id 列来自策略而不是来自 select 或连接。注意:我原以为 table 别名可以解决这个问题,但似乎没有。
您应该限定所有列引用,如下所示:
...
WHERE g.id = "group".id
AND gm.person_id = "group".person_id
我正在尝试在 postgres 中创建一个导致 column reference "person_id" is ambiguous
的策略。
为了制作一个类似的小例子,让我们描述 3 tables:人、组和 group_member。
此人有:身份证、姓名
群组有:id、person_id 和 name
群组成员有: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在这种情况下可以从子select引用group.person_id或group_member.person_id,但我真正想要的是person_id 来自 "with check"。这通常适用于其他地方。
问题:有没有办法明确指定 person_id 列来自策略而不是来自 select 或连接。注意:我原以为 table 别名可以解决这个问题,但似乎没有。
您应该限定所有列引用,如下所示:
...
WHERE g.id = "group".id
AND gm.person_id = "group".person_id