嗨,我正在使用 Postgres,我有一個角色“my_role”,我想僅在我的corporate_id 與其他表相關的情況下更新一個表中的記錄。
我想為人員表創建一個策略,并且我有一個公司表中的corporate_id 來驅動以獲取此資訊,如下所示:
SELECT * FROM person p
INNER JOIN person_brand a ON p.person_id=a.person_id
INNER JOIN brand b ON a.brand_id=b.brand_id
INNER JOIN corporate c on b.corporate_id=c.corporate_id
WHERE c.corporate_id=corporate_id
我的政策將是這樣的:
ALTER TABLE core.person ENABLE ROW LEVEL SECURITY;
CREATE POLICY person_corporation_all
ON person
AS PERMISSIVE
FOR UPDATE
TO "my_role"
USING (EXISTS(SELECT 1 FROM person p
INNER JOIN person_brand a ON p.person_id=a.person_id
INNER JOIN brand b ON a.brand_id=b.brand_id
INNER JOIN corporate c on b.corporate_id=c.corporate_id
WHERE c.corporate_id=corporate_id));
但是告訴我這個錯誤:
ERROR: column reference "corporate_id" is ambiguous
SQL state: 42702
我需要將什么作為變數發送到我的查詢中?
問候
uj5u.com熱心網友回復:
您將擁有一個嵌套策略,因為在驗證中您person再次擁有該表,您將需要將其洗掉,并使用該表的名稱參考列person,例如:
CREATE POLICY person_corporation_all
ON person
AS PERMISSIVE
FOR UPDATE
TO "my_role"
USING (EXISTS(SELECT 1 FROM person_brand a
INNER JOIN brand b ON a.brand_id=b.brand_id
INNER JOIN corporate c on b.corporate_id=c.corporate_id
WHERE a.person_id=person.person_id and c.corporate_id=person.corporate_id));
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/463053.html
標籤:PostgreSQL 安全 角色
