refs #740: enforce HMM MCP VPD runtime boundary
This commit is contained in:
@@ -125,16 +125,35 @@ MCP의 표준 `Authorization` header는 하나이므로 “공통 gateway token
|
||||
|
||||
1. 백오피스에서 E1001, E1002 등 직원별 opaque token을 각각 발급한다.
|
||||
2. MCP 서버는 그 직원 token 자체를 Bearer Token으로 검증한다.
|
||||
3. 검증된 같은 token으로 DB 연결에서
|
||||
`ADMIN.HMM_ACCESS_CTX_PKG.SET_USER_BY_BEARER(:token)`을 호출한다.
|
||||
4. 같은 DB 세션에서 `HMM_LEAVE_BALANCES`, `HMM_LEAVE_REQUESTS`를 조회한다.
|
||||
5. `finally`에서 context를 초기화하고 connection pool에 반환한다.
|
||||
6. 서버 관리용 공통 토큰과 직원별 토큰을 동시에 요구해야 한다면 OAuth/API Gateway에서
|
||||
3. `ADMIN` 연결은 Select AI `SHOWSQL` 생성까지만 수행한다.
|
||||
4. `EXEMPT ACCESS POLICY`가 없는 `CB_ORDS` 연결에서
|
||||
`CB_ORDS_HANDLER_PKG.SET_VPD_CONTEXT('Bearer ' || :token)`을 호출한다.
|
||||
5. 같은 `CB_ORDS` DB 세션에서 생성된 읽기 전용 SQL로
|
||||
`HMM_LEAVE_BALANCES`, `HMM_LEAVE_REQUESTS`를 조회한다.
|
||||
6. 실행 전 런타임 사용자가 `ADMIN`이 아니고 `EXEMPT ACCESS POLICY`가 없으며,
|
||||
`HMM_ACCESS_CTX.EMPLOYEE_CODE`가 토큰 인증 결과와 일치하는지 확인한다.
|
||||
7. 하나라도 다르면 조회하지 않고 fail-closed 한다.
|
||||
8. `finally`에서 `CB_ORDS_HANDLER_PKG.CLEAR_VPD_CONTEXT`와 rollback을 수행한다.
|
||||
9. 서버 관리용 공통 토큰과 직원별 토큰을 동시에 요구해야 한다면 OAuth/API Gateway에서
|
||||
application identity와 user subject를 하나의 검증 가능한 access token으로 합친다.
|
||||
|
||||
이 흐름은 2026-07-23 백오피스 MCP에 적용됐다. 모든 MCP method가 토큰 해시·만료·회수·재직
|
||||
상태를 확인하며, Tool 호출은 같은 JDBC connection에서 `HMM_ACCESS_CTX_PKG.SET_USER_BY_BEARER`
|
||||
후 실행하고 `finally`에서 context를 지운다. 무토큰·무효·회수 토큰은 HTTP 401이다.
|
||||
이 흐름은 2026-07-31 백오피스 MCP `search_hr_data`에 적용됐다. 모든 MCP method가 토큰
|
||||
해시·만료·회수·재직 상태를 확인한다. `search_hr_data`는
|
||||
`HMM_HR_DATA_GPT54_PROFILE`로 SQL만 생성하고, 실제 SQL은 위 `CB_ORDS` 세션에서 실행한다.
|
||||
무토큰·무효·회수 토큰은 HTTP 401이다.
|
||||
|
||||
운영 환경에는 다음 값이 필요하다.
|
||||
|
||||
```dotenv
|
||||
BACKOFFICE_SELECT_AI_PROFILE=HMM_HR_DATA_GPT54_PROFILE
|
||||
BACKOFFICE_SELECT_AI_RUNTIME_DB_URL=<ADB JDBC URL>
|
||||
BACKOFFICE_SELECT_AI_RUNTIME_DB_USERNAME=CB_ORDS
|
||||
BACKOFFICE_SELECT_AI_RUNTIME_DB_PASSWORD=<운영 secret>
|
||||
```
|
||||
|
||||
DB 구성 스크립트는 `sql/adb/73_hmm_mcp_vpd_runtime.sql`이다. 이 스크립트는 승인된 HMM
|
||||
HR 객체에 대한 개별 `SELECT`와 handler package 실행 권한만 부여하며
|
||||
`EXEMPT ACCESS POLICY`는 부여하지 않는다.
|
||||
|
||||
포털의 `HMM_MCP_BEARER_TOKEN` 공용 preset은 별도 호환 gateway를 사용하는 기존 UI 라우팅이다.
|
||||
Agent Factory의 사용자별 권한 검증에는 반드시 백오피스 MCP 주소와 직원 토큰을 사용한다.
|
||||
|
||||
Reference in New Issue
Block a user