diff --git a/docs/design/744-windows-ad-dds-end-user-mapping/README.md b/docs/design/744-windows-ad-dds-end-user-mapping/README.md index 098f84c..a737f2d 100644 --- a/docs/design/744-windows-ad-dds-end-user-mapping/README.md +++ b/docs/design/744-windows-ad-dds-end-user-mapping/README.md @@ -200,6 +200,22 @@ database-access token은 `resource_app_id`, `tenant_iss`, scope가 DB identity p 이후 권한 차이를 눈으로 확인할 수 있도록 `DDS_AD_ALICE_LEAVE_001` 테스트 문서와 `DDS_AD_TEST` 태그를 HMM knowledge 원천에 추가했다. 같은 `휴가` 검색에서 Alice는 이 문서 1건을 반환하고 Bob은 `ORA-00942` 기반 default deny로 거부되는 것을 확인했다. +### AIPF 화면에서의 권한 차이 해석 + +동일한 AIPF Agent 요청을 Alice와 Bob으로 실행한다. + +```text +dds_vector_search 도구를 사용해서 "휴가"를 검색해줘. +embeddingMode는 DEMO, limit은 10으로 해줘. +``` + +| 로그인 사용자 | AIPF에서 보이는 결과 | DB 측 실제 의미 | 판정 | +|---|---|---|---| +| `dds-alice` | `휴가 정책 - Alice 전용 테스트` 1건 반환 | Keycloak `sub` → `DDS_U_1`, `DDS_U_1_ROLE`의 SELECT DATA GRANT가 `CB_VECTOR_SEARCH_DOCUMENTS`에 적용 | 허용 | +| `dds-bob` | “검색에 실패했습니다”, “DDS 보호 객체를 조회할 수 없습니다” | Keycloak `sub` → `DDS_U_2`, 해당 role에 DATA GRANT가 없어 Oracle이 `ORA-00942`로 보호 객체를 숨김 | default deny / 정상 차단 | + +따라서 Bob의 AIPF 화면 문구는 시스템 장애가 아니라 의도한 보안 결과다. 현재 MCP 응답은 SQL 오류를 외부에 노출하지 않기 위해 일반 문구로 변환한다. 운영 UI에서는 이를 “접근 권한이 없습니다”로 표시하도록 개선할 수 있지만, PoC의 권한 검증 자체는 Alice 허용·Bob 거부로 완료됐다. + ## 5. Entra ID로 전환할 때 Entra tenant가 확보되면 AD DS/bridge 테스트에서 확인한 `issuer + immutable subject -> CB_APP_USER -> DDS END USER` 계약은 유지한다. 바뀌는 부분은 token issuer와 JWKS 검증 설정뿐이다. Entra의 claim 이름(`oid`, `sub`, `preferred_username` 등)은 실제 발급 토큰을 확인한 뒤 결정하며, `sub` 단독이 아니라 tenant/issuer 경계를 반드시 포함한다.