feat: center DDS demo on sales knowledge authorization
This commit is contained in:
@@ -2,12 +2,26 @@
|
||||
|
||||
> **상태**: VPD·DDS 병행 검증 완료, 토큰 기반 객체별 Data Grant 적용 완료
|
||||
> **추적성**: Redmine #565, #566 · DDS 구현 커밋 `1e48864`, `a5e70bc`
|
||||
> **기준 구현**: `sql/adb/32_dds_vector_tag_setup.sql`, `sql/adb/34_dds_token_data_grant_common_auth.sql`, `dds-backoffice/src/main/java/com/cloudhandson/ddsbackoffice/service/DdsGrantPublisher.java`, `dds-backoffice/src/main/java/com/cloudhandson/ddsbackoffice/service/DdsVectorKnowledgeService.java`
|
||||
> **기준 구현**: `sql/adb/32_dds_vector_tag_setup.sql`, `sql/adb/34_dds_token_data_grant_common_auth.sql`, `sql/adb/36_dds_sales_knowledge_scenario.sql`, `dds-backoffice/src/main/java/com/cloudhandson/ddsbackoffice/service/DdsGrantPublisher.java`, `dds-backoffice/src/main/java/com/cloudhandson/ddsbackoffice/service/DdsVectorKnowledgeService.java`
|
||||
|
||||
## 목적
|
||||
|
||||
VPD와 Oracle Deep Data Security(DDS)를 별도 인스턴스로 운영하면서도, 고객의 업무 권한을 정의하는 공통 테이블을 기준으로 같은 검색 시나리오를 비교한다. 고객마다 DDS 계정을 만드는 것이 목표가 아니다. 현재 기본 데모는 하나의 DDS 기술 사용자 세션에서 Bearer 토큰으로 Context를 만들고, 객체별 Data Grant predicate가 공통 권한 테이블을 읽어 결과를 제한한다.
|
||||
|
||||
## 주 시나리오: 세일즈 사용자의 지식 검색
|
||||
|
||||
PG/MySQL 원본 매트릭스는 DDS의 객체·행 Grant 동작을 설명하기 위한 보조 예제다. 제품 흐름의 주인공은 지식 검색이다.
|
||||
|
||||
```text
|
||||
세일즈 사용자 agent_sales
|
||||
→ Bearer 토큰으로 사용자 식별
|
||||
→ SALES_KNOWLEDGE_ROLE의 ALLOW TAG SALES 확인
|
||||
→ 벡터 청크의 TECH_TAG 컬럼 값 검사
|
||||
→ TECH_TAG에 SALES가 포함된 지식만 검색 결과에 포함
|
||||
```
|
||||
|
||||
문서 청킹·임베딩 단계에서 청크마다 `TECH_TAG` 값을 저장한다. 이 값은 단순한 화면용 태그가 아니라, DDS가 보호 VIEW의 행을 판단하는 업무 분류값이다. 따라서 `agent_sales` 토큰으로 검색하면 세일즈 파이프라인 가이드처럼 `TECH_TAG=SALES`인 청크만 반환되고 HR·FINANCE 등 다른 값의 청크는 벡터 유사도가 높아도 반환되지 않는다.
|
||||
|
||||
## 인스턴스 경계
|
||||
|
||||
| 구분 | VPD Demo | DDS Demo |
|
||||
@@ -23,7 +37,7 @@ VPD와 Oracle Deep Data Security(DDS)를 별도 인스턴스로 운영하면서
|
||||
|
||||
## 동일하게 비교할 수 있는 것
|
||||
|
||||
- 사용자별 원본 접근 범위
|
||||
- 업무 분류값별 지식 접근 범위
|
||||
- 행 단위 허용/차단
|
||||
- 권한 없는 사용자의 default deny
|
||||
- 보호 VIEW 우회 시도 차단
|
||||
@@ -75,6 +89,7 @@ WHERE EXISTS (허용된 TAG 중 하나가 청크 TAG와 일치)
|
||||
| `agent_hr` | `SPRING_BOOT` OR `ORACLE_VPD` | `28001`, `28002` (2건) |
|
||||
| `agent_fin_self` | `ORACLE_VPD` | `28002` (1건) |
|
||||
| `agent_all` | 전체 허용 역할 | `28001`, `28002`, `28003` (3건) |
|
||||
| `agent_sales` | `SALES` | `28004` (1건) |
|
||||
|
||||
토큰 행, 임시 함수, 임시 권한은 검증 직후 삭제했다. 이 결과는 “DDS 사용자 수 = 고객 사용자 수”가 아니라 “DDS 기술 사용자 1개 + 고객 권한 테이블” 모델이 동작함을 보여 준다.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user