因此,我试图为多个用户配置对postgres/postgis数据库的不同访问。
基本上,我有1个管理员用户和4个弱用户访问db。
我想做的是防止弱用户删除数据库中的另一个用户所做的条目。但是,所有用户仍然应该能够看到数据库中所有用户的所有条目。
因此,我想知道,我应该设置哪些允许性和限制性的rls策略来使其发挥作用?
谢谢你们的帮助!
发布于 2021-09-27 12:57:48
那应该很简单。创建一个列,该列包含添加该行的用户的名称,并将其隐藏在视图后面。
CREATE TABLE tab (
id bigint PRIMARY KEY,
data text,
creator name DEFAULT current_user NOT NULL
);
CREATE VIEW tab_v AS SELECT id, data FROM tab;
GRANT SELECT, DELETE ON tab_v TO users, admin;在应用程序中只使用tab_v;用户不能访问tab。插入到tab_v中的行将在tab中以正确的creator集结束。
然后创建适当的策略:
ALTER TABLE tab ENABLE ROW LEVEL SECURITY;
-- everybody can SELECT and INSERT everything
CREATE POLICY tab_read ON tab FOR SELECT TO PUBLIC
USING (TRUE);
CREATE POLICY tab_insert ON tab FOR INSERT TO PUBLIC
WITH CHECK (TRUE);
-- normal users can delete their own rows
CREATE POLICY user_delete ON tab FOR DELETE TO users
USING (creator = current_user);
-- admin can delete everything
CREATE POLICY admin_delete ON tab FOR DELETE TO admin
USING (TRUE);https://dba.stackexchange.com/questions/300185
复制相似问题