# HMM MCP VPD 아키텍처 [개요](README.md) · [적용 절차](cookbook.md) · [문제 해결](troubleshooting.md) ## 권한 흐름 ```text 포털 사용자 preset → 사용자별 Bearer token → token hash로 EMPLOYEE_ID 식별 → HMM_ACCESS_CTX.EMPLOYEE_ID 설정 → Select AI가 만든 SELECT를 CB_ORDS에서 실행 → HMM_CARRIER_ASSIGNMENTS_V VPD ├─ VIEWER: 본인 EMPLOYEE_ID └─ MANAGER: 본인과 직속 팀원 EMPLOYEE_ID → 허용된 CARRIER_CODE만 원격 선사 실적과 조인 → HTML renderer ``` 선사 조회의 자연어 처리와 `CARRIER_CODE` 조인은 기존 Select AI 프로필을 유지한다. 권한 조건을 질문이나 고정 SQL에 넣지 않고 Oracle VPD가 세션 사용자 ID로 자동 적용한다. ## 신뢰 경계 - 화면에 표시된 사용자 코드는 권한 근거가 아니다. 선택 preset의 전용 Bearer token이 근거다. - 토큰 원문은 서버 환경에만 저장하고 DB에는 SHA-256 hash만 저장한다. - `ADMIN`은 `EXEMPT ACCESS POLICY`가 있으므로 SQL 생성만 수행한다. - 실제 SELECT는 비면제 계정 `CB_ORDS`가 같은 요청의 VPD context를 설정한 뒤 실행한다. - renderer는 이미 필터링된 행만 표현하며 사용자나 권한을 다시 판단하지 않는다. ## 선사 VPD 규칙 보호 객체는 `ADMIN.HMM_CARRIER_ASSIGNMENTS_V`, 기준 컬럼은 `EMPLOYEE_ID`다. | 역할 | 규칙 | 적용 범위 | |---|---|---| | `HMM_HR_VIEWER` | `SELF` | 현재 인증 사용자 | | `HMM_HR_MANAGER` | `MANAGED_TEAM` | 현재 사용자와 직속 팀원 | | `HMM_HR_ADMIN` | `ALL` | 명시적 관리자 전체 | 컨텍스트, 활성 역할 또는 허용 규칙이 없으면 `1=0`으로 차단한다.