【问题标题】:Postgresql Row Level Security Checking new data in WITH CHECK in Policy for INSERTPostgresql 行级安全性检查 INSERT 策略中 WITH CHECK 中的新数据
【发布时间】:2018-04-30 01:51:09
【问题描述】:

我有一个包含多个表的数据库。 一个用户有几个对象,一个对象有几个部分。

我想编写一个策略,只允许对象的创建者向对象添加部分。因此我需要获取要插入的部分所属的对象,但我不知道如何检查数据。

有没有办法让数据插入到策略中?

感谢您的努力。

【问题讨论】:

    标签: postgresql row-level-security


    【解决方案1】:

    这是一个示例,如何使用行级安全性实现类似的功能。根据您的需要进行调整!

    CREATE TABLE object(
       id integer PRIMARY KEY,
       name text NOT NULL,
       owner name NOT NULL DEFAULT current_user
    );
    
    CREATE TABLE part(
       id integer PRIMARY KEY,
       parent_id integer NOT NULL REFERENCES object(id),
       name text NOT NULL
    );
    

    我们必须给人们一些权限:

    GRANT SELECT, INSERT ON object TO PUBLIC;
    GRANT SELECT, INSERT ON part TO PUBLIC;
    

    现在我们启用行级安全性,当object 中的owner 匹配时,只允许part 中的INSERTs:

    ALTER TABLE part ENABLE ROW LEVEL SECURITY;
    
    CREATE POLICY insert_only_owned ON part
       FOR INSERT TO PUBLIC
       WITH CHECK (EXISTS(
                      SELECT 1
                      FROM object o
                      WHERE o.id = parent_id
                        AND owner = current_user
                  ));
    

    【讨论】:

    • ALTER TABLE part ENABLE ROW LEVEL SECURITY 应该在 GRANT 之后重要吗?
    • 我的问题的答案是否定的
    猜你喜欢
    • 2020-12-01
    • 2022-07-07
    • 2022-01-03
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 2020-11-19
    相关资源
    最近更新 更多