행 단위 보안(Row-Level Security, RLS)은 특정 데이터셋과 역할에 필터를 적용하여 사용자가 조회할 수 있는 데이터 범위를 제한하는 기능입니다.
예를 들어, 마케팅 부서 구성원은 마케팅 부서의 데이터만 볼 수 있도록 설정할 수 있습니다.
RLS 적용 전 선행 조건
RLS는 데이터셋에 대한 접근 권한이 있는 사용자에게만 적용됩니다. 사용자가 데이터셋을 조회하려면 먼저 HC_DataAsset_* 역할에 아래 접근 권한 중 하나 이상이 설정되어 있어야 합니다.
접근 범위 | 권한 표현 |
데이터베이스 전체 | database access on [데이터베이스명] |
특정 스키마 | schema access on [스키마명] |
특정 데이터셋 | datasource access on [데이터셋명] |
RLS는 이 접근 권한 위에서 어떤 행까지 볼 수 있는지를 추가로 제한합니다.
1. 행 단위 보안(RLS) 설정 방법
1.
화면 우측 상단의
설정 → 보안 → 행 단위 보안을 클릭합니다.
2.
우측 상단의 + 규칙 버튼을 클릭합니다.
3.
행 단위 보안 필터 정보를 입력합니다.
•
필터 유형
유형 | 동작 방식 |
Regular | 필터에 지정된 역할에 속한 사용자의 쿼리에만 WHERE 절을 추가합니다. 해당 역할이 없는 사용자에게는 필터가 적용되지 않아 모든 데이터가 노출됩니다. |
Base | 필터에 지정된 역할을 제외한 모든 사용자의 쿼리에 필터를 적용합니다. 같은 그룹 내에서 적용 가능한 RLS 필터가 없는 사용자에게 표시할 기본 데이터 범위를 정의할 때 사용합니다. |
•
데이터셋 — 필터를 적용할 데이터셋을 선택합니다. 복수 선택이 가능하며, 선택한 데이터셋을 사용하는 쿼리에만 필터가 적용됩니다.
•
역할 / 제외된 역할 — 필터를 적용하거나 적용하지 않을 역할을 선택합니다.
RLS 전용 역할(예: HC_RLS_영업부)을 별도로 생성하여 사용하는 것을 권장합니다.
•
그룹 키 (선택사항) — 여러 RLS 필터를 논리적으로 묶는 식별자입니다.
◦
같은 그룹 키를 가진 필터끼리는 OR로 결합됩니다.
◦
다른 그룹 키를 가진 필터는 AND로 결합됩니다.
◦
그룹 키가 없는 필터는 각각 독립된 그룹으로 처리됩니다. (다른 필터와 묶이지 않고 개별적으로 AND 결합)
WHERE (그룹 키 없는 필터1)
AND (그룹 키 없는 필터2)
AND (그룹A 필터1 OR 그룹A 필터2)
AND (그룹B 필터1 OR 그룹B 필터2)
SQL
복사
그룹 키가 필요한 경우
사용자가 여러 역할을 가지고 있고, 각 역할이 같은 컬럼을 서로 다른 값으로 필터링할 때 그룹 키를 사용합니다. 그룹 키 없이 두 필터를 적용하면 부서 = 'A' AND 부서 = 'B'가 되어 결과가 0건이 됩니다. 같은 그룹 키를 지정하면 (부서 = 'A' OR 부서 = 'B')로 처리되어 두 부서 데이터를 모두 조회할 수 있습니다.
i.
그룹 키를 사용하지 않은 경우
보상센터명 = '전문심사부’ AND 보상센터명 = '충청장기센터’
ii.
그룹 키를 사용한 경우
보상센터명 = '전문심사부’ OR 보상센터명 = '충청장기센터’
•
조건 절 — 쿼리의 WHERE 절에 추가될 SQL 조건을 입력합니다.
◦
생성된 필터는 쿼리 실행 시 WHERE 절에 자동으로 추가됩니다.
◦
여러 조건을 하나의 필터에 작성할 수 있습니다.
◦
Jinja2 표현식을 사용하면 로그인한 사용자 정보를 조건에 활용할 수 있습니다.
-- 특정 부서 데이터만 조회
부서 = '영업부'
-- 여러 조건 조합
부서 = '영업부' AND 팀명 = '온라인팀'
-- 로그인한 사용자 이름 기준으로 필터링 (Jinja2)
담당자 = '{{ current_username() }}'
-- 아무 데이터도 보여주지 않음 (Base 필터에서 기본값으로 사용)
1 = 0
SQL
복사
4.
저장하기 버튼을 클릭합니다.
2. 행 단위 보안(RLS) 설정 예시
어떤 사용자가 전문심사부 > 전문심사1팀 데이터만 조회해야 하는 경우,
RBAC(역할 기반 접근 제어)와 RLS(행 단위 보안)를 함께 사용하여 다음과 같이 설정합니다.
1단계 — RLS 역할 생성
역할 이름 |
HC_RLS_전문심사부 |
HC_RLS_전문심사1팀 |
2단계 — RLS 규칙 생성
규칙 이름 | 역할 | 조건 절 |
전문심사부 필터 | HC_RLS_전문심사부 | 보상센터명 = '전문심사부’ |
전문심사1팀 필터 | HC_RLS_전문심사1팀 | 보상팀명 = '전문심사1팀’ |
3단계 — 사용자에게 역할 부여
역할 |
HC_RLS_전문심사부 |
HC_RLS_전문심사1팀 |
결과
HC_RLS_전문심사부, HC_RLS_전문심사1팀 역할을 가진 사용자가 대시보드나 차트에서 대상 데이터셋(oda.insurance)을 조회할 때 전문심사부이면서 전문심사1팀 데이터만 표시됩니다.
•
AS-IS
•
TO-BE










