세분화된 정책 편집 (FGAC)
세분화된 정책(FGAC) 편집 다이얼로그는 컬럼 마스크와 행 필터를 구성하여 주체별로 다른 데이터 뷰를 만들 수 있게 해주는 UI입니다.
다이얼로그 구조
정책 목록 화면에서 + 정책 추가 또는 편집을 누르면 정책 폼 모달이 열립니다. 모달은 다음 섹션으로 구성됩니다.
1. 주체 선택 (Subject)
- 사용자 / 그룹 탭으로 주체 유형을 선택합니다.
- 이름·이메일 기준의 클라이언트 필터링을 지원하여 입력 즉시 결과가 갱신됩니다.
- 선택된 주체는 상단에 배지로 유지되며, 한 다이얼로그에서 하나의 주체만 설정합니다.
비-관리자 사용자에 대한 주체 검색
ADR-0039 / ADR-0040으로 비-관리자 사용자도 정책 편집 시 검색 결과로 노출됩니다. 이전에는 관리자만 /admin 사용자/그룹 디렉토리를 조회할 수 있어 비-관리자는 주체 검색이 막혔습니다. 이제는 검색 결과가 호출자의 권한 범위 내(같은 컬렉션·그룹에 속한 사용자 등)로 제한되어 노출되며, 비-관리자 사용자가 다른 사용자의 전체 디렉토리를 보지 못하도록 합니다.
- 비-관리자: 같은 컬렉션·그룹의 멤버만 검색 결과로 노출.
- 관리자: 전체 사용자·그룹 디렉토리 접근 가능.
이 변화로 자산 소유자가 팀 동료에게 정책을 부여하는 일반적인 시나리오를 권한 위임 없이 처리할 수 있습니다.
2. 컬럼 마스크 (Column Masks)
- 자산의 스키마에서 컬럼 이름을 드롭다운으로 선택합니다. 수동 입력 대신 스키마 인식 Select를 사용하여 오타와 없는 컬럼을 차단합니다.
- 선택한 컬럼에 적용할 마스크 유형을 지정합니다.
- HIDE: 컬럼 자체를 쿼리 결과에서 제거
- PARTIAL: 값의 일부만 노출(예: 이메일 도메인만 유지)
- HASH/REDACT: 고정 해시값 또는 대체 문자열로 치환
- 여러 컬럼을 동시에 마스킹할 수 있으며, 각 항목을 개별 삭제할 수 있습니다.
3. 행 필터 (Row Filters)
- 트리 형태의 조건 빌더로 WHERE 절을 구성합니다.
- 각 조건은
컬럼 · 연산자 · 값의 세 파트로 구성되며, AND/OR 그룹으로 중첩할 수 있습니다. - 컬럼은 스키마 드롭다운에서, 연산자는 컬럼 타입에 맞는 목록(=, !=, IN, BETWEEN, LIKE 등)에서 선택합니다.
- 조건이 비어 있는 상태로 저장하면 "행 필터 없음"(모든 행 노출)으로 처리됩니다.
저장과 검증
- 저장: 폼을 검증한 뒤 백엔드에 정책을 생성·갱신합니다. 저장 후 목록 테이블이 즉시 갱신됩니다.
- 중복 방지: 같은 주체·리소스 조합의 정책이 이미 존재하면 편집 모드로 전환되도록 유도합니다.
- 에러 처리: 필수 필드 누락이나 서버 검증 실패는 필드 하이라이트와 토스트 메시지로 안내합니다.
삭제
- 목록 테이블의 삭제를 클릭하면 확인 모달이 뜹니다. 정책 삭제는 되돌릴 수 없으며, 주체의 접근 조건은 다시 역할 기반 권한만 적용됩니다.
동작 원리 (요약)
정책은 런타임에 다음과 같이 적용됩니다.
- 사용자가 자산을 쿼리(SELECT)하면 서버가 현재 사용자와 그룹에 일치하는 정책을 조회합니다.
- 적용 가능한 정책의 컬럼 마스크는 SELECT 절에, 행 필터는 WHERE 절에 자동 주입됩니다.
- 여러 정책이 매칭되면 가장 제한적인 규칙이 누적 적용됩니다.
제한 사항
- 정책은 데이터셋·컬렉션 단위로 적용됩니다. 개별 코드/파이프라인 결과에는 영향을 주지 않습니다.
- DML/DDL에는 정책이 적용되지 않으며, 포털의 인앱 SQL은 기본적으로 SELECT만 허용합니다.
- 현재 컬렉션 간 자산 복사/Symlink는 미지원이므로, 같은 데이터를 다른 컬렉션에서 재사용하려면 이동 후 정책을 다시 부여해야 합니다.