Postgresql 行级安全性检查插入策略中的 WITH CHECK 中的新数据
Postgresql Row Level Security Checking new data in WITH CHECK in Policy for INSERT
我有一个包含多个表的数据库。
一个用户有几个对象,一个对象有几个部分。
我想编写一个策略,只允许对象的创建者向对象添加部件。因此我需要获取要插入的对象a所属的部分,但我不知道如何检查数据。
有没有办法获取要插入策略中的数据?
感谢您的努力。
下面是一个示例,说明如何使用行级安全性实现类似的功能。根据您的需要进行调整!
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
中的 INSERT
s:
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
));
我有一个包含多个表的数据库。 一个用户有几个对象,一个对象有几个部分。
我想编写一个策略,只允许对象的创建者向对象添加部件。因此我需要获取要插入的对象a所属的部分,但我不知道如何检查数据。
有没有办法获取要插入策略中的数据?
感谢您的努力。
下面是一个示例,说明如何使用行级安全性实现类似的功能。根据您的需要进行调整!
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
中的 INSERT
s:
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
));