PostgreSQL의 행 수준 보안(RLS)은 테이블 단위로 활성화되며, 정의된 정책에 따라 데이터 접근이 제어됩니다.
RLS 활성화 및 정책 정의
-
활성화:
ALTER TABLE posts ENABLE ROW LEVEL SECURITY;명령으로 RLS를 적용합니다. -
정책 생성:
CREATE POLICY문을 사용하여 정책을 정의합니다.USING (조건)절은 읽기 접근을,WITH CHECK (조건)절은 쓰기(INSERT/UPDATE) 접근을 제어합니다. 예를 들어,created_by = current_user조건을 통해 현재 사용자가 생성한 레코드만 접근 허용할 수 있습니다.
정책 유형 및 기능
-
Permissive (허용적) vs. Restrictive (제한적): 정책은 기본적으로 제한적이며, 조건을 만족하지 않으면 작업이 거부됩니다.
AS PERMISSIVE를 사용하여 여러 정책 중 하나만 만족해도 허용되는 허용적 정책을 만들 수 있습니다. -
삽입 제한:
WITH CHECK (published = FALSE)와 같은 정책은published가TRUE인 새 게시물 삽입을 방지합니다. -
테이블 소유자 적용:
ALTER TABLE posts FORCE ROW LEVEL SECURITY;명령을 통해 테이블 소유자에게도 RLS 정책을 강제 적용할 수 있습니다. -
RLS 우회:
ALTER ROLE user_name BYPASSRLS;명령으로 특정 사용자에게 RLS 정책을 우회할 수 있는 권한을 부여하여 관리자 접근을 용이하게 합니다.
RLS는 데이터 보안을 강화하고 사용자별 접근 권한을 세밀하게 제어하여 데이터 프라이버시를 효과적으로 유지하는 데 기여합니다.