# HMM 휴가 팀 계층 VPD 적용·검증 보고서 - 일자: 2026-07-23 - Redmine: #707 - 브랜치: `hmm-backoffice` - 대상 DB: HMMAIPOC `ADMIN` - 대상 서비스: `https://hmm-backoffice.cloud-handson.com` ## 적용 결과 `database/adb/72_hmm_leave_team_vpd.sql`을 적용해 다음 구성을 활성화했다. | 구성 | 결과 | |---|---| | 신뢰 컨텍스트 | `HMM_ACCESS_CTX` | | 토큰 검증 패키지 | `HMM_ACCESS_CTX_PKG` / `VALID` | | 정책 함수 | `HMM_LEAVE_VPD_FILTER` / `VALID` | | 휴가 잔여 정책 | `HMM_LEAVE_BALANCES.HMM_LEAVE_SCOPE_POLICY` / `ENABLE=YES` | | 휴가 신청 정책 | `HMM_LEAVE_REQUESTS.HMM_LEAVE_SCOPE_POLICY` / `ENABLE=YES` | | 팀장 역할 | E1001 → `HMM_HR_MANAGER` | | 팀원 역할 | E1002~E1007 → `HMM_HR_VIEWER` | | 저장 권한 | 두 객체 × `ALL`, `MANAGED_TEAM`, `SELF` = 6건 | ## 실제 행 접근 검증 `ADMIN`에는 `EXEMPT ACCESS POLICY`가 있으므로 이를 결과 검증에 사용하지 않았다. 별도의 비면제 임시 DB 사용자를 만들고, SHA-256 해시만 DB에 저장한 임시 E1001/E1002 토큰으로 조회한 뒤 사용자와 토큰을 즉시 제거했다. | 검증 세션 | 휴가 잔여 | 휴가 신청 | 교차 사용자 조건 조회 | |---|---:|---:|---:| | 컨텍스트 없음 | 0 | 0 | - | | E1001 팀장 | 7 | 8 | 직접 보고 팀원 포함 | | E1002 팀원 | 1 | 1 | E1003 신청 0 | | 무효 토큰 | 0 | - | 컨텍스트 초기화·차단 | 결과: `VPD_VERIFY=PASS` ## 애플리케이션 검증 - Maven: 105 tests, 0 failures, 0 errors - 배포 JAR SHA-256: `1b10582e72e4639902ea8f65156af1067941af3ef50cde1d9f767c88f048fb85` - systemd: `vpd-backoffice.service` active - 공개 로그인: HTTP 200 - 실제 브라우저 전수 검사: - 관리 화면 26개: 실패 0 - HMM 정형 원장 6개: 실패 0 - `ORA-*`, 데이터 처리 오류, KB/POC 잔존 문구: 0 - page error: 0 - console error: 0 특히 `/roles`, `/permissions`, `/vpd-policies`, `/vpd-filter-runtime`에서 HMM 역할 3개, 휴가 원장 권한 6개, 정책 2개와 `HMM_LEAVE_VPD_FILTER`가 표시되는 것을 화면으로 확인했다. ## 보안 정리 - DB 비밀번호, 토큰 원문, 해시는 Git·Redmine·보고서에 기록하지 않았다. - 임시 비면제 DB 사용자는 검증 종료 시 `DROP USER ... CASCADE`로 제거했다. - 임시 토큰 2건은 검증 종료 시 삭제했다. - HR 관리자 역할은 전체 접근 규칙만 준비하고 데모 사용자에게 자동 부여하지 않았다.