6.7 KiB
6.7 KiB
VPD·ASO 권한 운영 페이지별 페르소나 리뷰
상태: Review only 작성일: 2026-07-13 범위: 현재 Spring Boot 백오피스 화면을 기준으로, 구현 변경 없이 페이지별 개선 의견만 정리
1. 이번 리뷰의 전제
이 백오피스의 핵심 목적은 Oracle DB에서 VPD와 ASO(Data Redaction)를 조합해 사용자별 데이터 접근 범위를 운영하는 것이다.
- VPD는 행을 남기거나 제외한다. 토큰이 직접 VPD 함수에 전달되는 것이 아니라, 토큰 검증 후 세션 컨텍스트(
CB_AGENT_CTX)에 들어간 값이 VPD 필터의 조건으로 쓰인다. - ASO는 컬럼 값을 원문 또는 마스킹 값으로 반환한다. ASO 정책은 세션 컨텍스트의
MR_<column_id>같은 값을 보고 원문 표시 여부를 판단한다. - 백오피스에서 등록하는 접근 규칙은 최종 SQL 그 자체가 아니라, VPD 필터가 읽어 SQL predicate로 바꾸는 매핑 데이터다.
- 일반 운영자는 SQL 함수 구조보다 “이 사용자에게 어떤 테이블/행/컬럼이 어떻게 보이는가”를 먼저 이해해야 한다.
2. 리뷰 페르소나
| 페르소나 | 관심사 | 실패로 보는 상황 |
|---|---|---|
| 일반 사용자 | 검증 토큰으로 실제 결과를 확인하고 싶다 | VPD, ASO, ORDS, MCP 용어 때문에 무엇을 눌러야 할지 모름 |
| 운영 관리자 | 사용자·역할·권한·마스킹 설정을 안전하게 바꾸고 싶다 | 설정 변경의 영향 범위와 검증 방법이 분리되어 있음 |
| 적용 담당자 | 업무 규칙을 DB 적용 가능한 설정으로 옮기고 싶다 | “본인계약”, “채널내 전체”, “원문 허용”이 실제 필터/컨텍스트와 어떻게 연결되는지 안 보임 |
| DB 관리자 | DB에 어떤 정책과 스크립트가 적용됐는지 확인하고 싶다 | 백오피스 설정과 DBMS_RLS/DBMS_REDACT 실제 상태가 맞는지 증적이 부족함 |
3. 공통 개선 원칙
- 기본 화면은 “현재 상태, 주요 행동, 검증 버튼” 중심으로 둔다.
- SQL, 패키지, ORDS, VPD 함수, Redaction expression은 Advanced 또는 도움말로 보낸다.
- 모든 권한 화면은
업무 표현 → 저장 설정 → VPD/ASO 해석 → 검증 결과순서로 설명한다. - VPD와 ASO를 섞어 말하지 않는다.
- VPD: 어떤 행을 볼 수 있는가.
- ASO: 허용된 행의 어떤 컬럼을 원문으로 볼 수 있는가.
- 권한 설정 화면에서는 “이 조건이 그대로 DB에 붙는다”가 아니라 “이 설정값을 필터가 읽어 WHERE 조건을 만든다”라고 표현한다.
- 간단한 설정을 기본으로 두고, 조건식·정책명·패키지명·스키마명은 Advanced에서 확인하게 한다.
4. 페이지별 리뷰 파일
| 영역 | 페이지 | 리뷰 파일 |
|---|---|---|
| 시작 | 로그인 | 00-login.md |
| 시작 | 대시보드 | 01-dashboard.md |
| 권한 주체 | 사용자 | 02-users.md |
| 권한 주체 | 그룹 | 03-groups.md |
| 권한 주체 | 역할 | 04-roles.md |
| 권한 설정 | 접근 규칙 | 05-permissions.md |
| 권한 설정 | 원문 조회 허용 사용자 | 06-user-masking-rules.md |
| 권한 설정 | 사용자별 접근 확인 | 07-effective-matrix.md |
| 보호·검증 | 보호 상태 | 08-vpd-policies.md |
| 보호·검증 | 마스킹 규칙 | 09-masking-rules.md |
| 보호·검증 | 검증 세션 | 10-tokens.md |
| 보호·검증 | 접근 검증 | 11-probe.md |
| 연동 | 조회 대상 | 12-objects.md |
| 연동 | 정형 데이터 조회 | 13-structured-data.md |
| 연동 | 조회 연동 | 14-ords-handlers.md |
| 연동 | 지식 검색 | 15-vector-knowledge.md |
| 연동 | 대화형 검색 | 16-mcp-chatbot.md |
| 연동 | 검색 해석 | 17-mcp-reasoning.md |
| 연동 | MCP 서비스 | 18-mcp-sse.md |
| 연동 | 연동 점검 | 19-mcp-client-demo.md |
| 운영 | 운영 현황 | 20-operation-status.md |
| 관리자 | VPD 필터 구조 | 21-vpd-filter-runtime.md |
| 관리자 | DB 메타데이터 | 22-schema-metadata.md |
| 관리자 | 보안 SQL 스크립트 | 23-security-sql-scripts.md |
| 관리자 | 고급 접근 조건 | 24-vpd-filter-policies.md |
| 관리자 | 시스템 설정 | 25-settings.md |
| 관리자 | DB 준비 상태 | 26-settings-database.md |
5. 적용 우선순위 제안
| 우선순위 | 대상 | 이유 |
|---|---|---|
| P0 | 접근 규칙, 마스킹 규칙, 원문 조회 허용 사용자, 접근 검증 | 사용자가 VPD/ASO의 차이와 실제 적용 방식을 가장 많이 혼동하는 지점 |
| P0 | 보호 상태, 운영 현황 | DB 실제 적용 상태와 백오피스 설정 상태를 구분해야 장애 판단이 가능 |
| P1 | 사용자, 그룹, 역할, 사용자별 접근 확인 | 권한 주체와 상속 경로를 업무 담당자가 이해하기 쉽게 해야 함 |
| P1 | DB 메타데이터, 보안 SQL 스크립트, VPD 필터 구조 | 적용 담당자와 DB 관리자의 증적 확인 화면 |
| P2 | MCP/Select AI/Vector 연동 화면 | 기능 자체보다 권한이 적용된 호출 흐름과 지연 원인을 보여주는 방향으로 정리 |
6. 구현 전 확인할 설계 판단
- ASO는 컬럼 마스킹만 담당하고, 행 접근은 VPD만 담당한다는 원칙을 화면 문구와 메뉴명에 일관되게 반영한다.
- “원문 조회 허용 사용자”는 현재 사용자 단위 UNMASK 예외 중심이다. 향후 “내 담당 고객은 원문, 타인은 마스킹” 같은 조건부 원문 표시가 필요하면 VPD로 행 범위를 먼저 제한하고 ASO 컨텍스트 계산 방식을 확장해야 한다.
- 지점장 집계 요구는 ASO 마스킹 컬럼에 직접
SUM을 걸어 해결한다고 가정하면 안 된다. 집계 전용 trusted path나 별도 검증 가능한 API 설계가 필요하다. - Select AI용 메타데이터 화면은 자연어 질의 품질에 직접 영향을 주므로, 단순 주석 편집이 아니라 “이 컬럼이 어떤 업무 의미인지”를 사람이 이해하고 보강하는 화면으로 다뤄야 한다.