2017-11-16 3 views
-1

여러 테이블이있는 데이터베이스가 있습니다. 사용자는 여러 개의 개체를 가지고 있으며 개체에는 여러 개의 부분이 있습니다.Postgresql 행 레벨 보안 INSERT에 대한 정책에서 WITH CHECK의 새 데이터 확인

오브젝트의 작성자 만 오브젝트에 파트를 추가 할 수있는 정책을 작성하고자합니다. 따라서 부품을 삽입해야하는 객체를 가져와야하지만 데이터를 확인하는 방법을 모릅니다.

정책에 데이터를 삽입하는 방법이 있습니까?

감사합니다.

답변

0

다음은 행 수준 보안과 같은 것을 구현하는 방법의 예입니다. 그것을 당신의 필요에 맞게 수정하십시오!

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; 

이제 우리는 행 수준 보안을 사용하고 partINSERT들 수 있습니다 때 ownerobject의 일치 :

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 
      )); 
+0

화려한 Laurenz . 그것은 작동합니다. 고맙습니다. – cgfm