首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgres/Postgis :制定rls政策

Postgres/Postgis :制定rls政策
EN

Database Administration用户
提问于 2021-09-26 17:32:04
回答 1查看 80关注 0票数 1

因此,我试图为多个用户配置对postgres/postgis数据库的不同访问。

基本上,我有1个管理员用户和4个弱用户访问db。

我想做的是防止弱用户删除数据库中的另一个用户所做的条目。但是,所有用户仍然应该能够看到数据库中所有用户的所有条目。

因此,我想知道,我应该设置哪些允许性和限制性的rls策略来使其发挥作用?

谢谢你们的帮助!

EN

回答 1

Database Administration用户

发布于 2021-09-27 12:57:48

那应该很简单。创建一个列,该列包含添加该行的用户的名称,并将其隐藏在视图后面。

代码语言:javascript
复制
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集结束。

然后创建适当的策略:

代码语言:javascript
复制
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);
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/300185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档