Database

PostgreSQL - Row Level Secuirty

뽀글뽀글 개발자 2025. 9. 17. 11:47

RLS란? 

Row Level Security는 직역하면 "행 수준 보안"이라는 뜻으로 테이블의 특정 행에 대한 접근을 제어하는 보안 기능이다.

 

예를 들어, 영업사원 A는 자신이 담당하는 고객 정보만을 볼 수 있고, 관리자는 모든 데이터를 볼 수 있도록 설정하는 것이 RLS이다.

 

이러한 접근 제어는 서버에서 DB 조회할 때 본인의 데이터만 조회할 수 있도록 로직을 구성하겠지만, 혹시나 실수로 놓쳤을 수 있다.

따라서 DB system 레벨에서 설정해줌으로써 더욱 안전하게 관리할 수 있다.

 

 

RLS 설정 쿼리

-- 테이블에서 RLS 활성화
ALTER TABLE orders ENABLE ROW LEVEL SECURITY;

-- 정책 생성 (영업사원은 자신의 주문만 조회 가능하고 관리자는 전부 조회 가능)
CREATE POLICY sales_policy ON orders
    FOR SELECT
    TO sales_role, manager_role
    USING (
        salesperson_id = current_user_id() OR  -- 본인 담당 주문
        current_user IN (SELECT username FROM users WHERE role = 'admin')  -- 관리자는 모든 주문
    );