업무 사용자 토큰
Bearer 토큰을 세일즈 업무 사용자로 매핑합니다.
diff --git a/dds-backoffice/README.md b/dds-backoffice/README.md
index d42b40c..4d96acf 100644
--- a/dds-backoffice/README.md
+++ b/dds-backoffice/README.md
@@ -3,11 +3,11 @@
`dds-backoffice`는 기존 VPD 데모와 코드·프로세스·포트·보호 객체를 분리한 Deep Data Security 전용 데모입니다.
- 기본 포트: `8083`
-- 기본 화면: `/` (공통 권한 여정), `/dds` (DDS 직접 조회 검증)
+- 기본 화면: `/` (공통 권한 여정), `/dds` (지식 보호 객체 구조)
- 권한 반영: `/dds-provision` (공통 권한을 DDS DATA GRANT로 미리보기·게시)
- 주 보호 객체: `ADMIN.CB_DDS_VECTOR_SEARCH_DOCUMENTS` (지식 청크·분류값 검색)
-- 보조 직접 검증 객체: `ADMIN.V_DDS_CUSTOMERS_PG`, `ADMIN.V_DDS_CUSTOMERS_MY`
-- 보조 DDS 비교 사용자: `dds_demo_my`, `dds_demo_pg`, `dds_demo_both`, `dds_demo_none`
+- 보조 SQL 검증 객체: `ADMIN.V_DDS_CUSTOMERS_PG`, `ADMIN.V_DDS_CUSTOMERS_MY`
+- 보조 DDS SQL 검증 사용자: `dds_demo_my`, `dds_demo_pg`, `dds_demo_both`, `dds_demo_none`
- 토큰 경로 기술 사용자: `dds_demo_token` (고객별 DDS 계정이 아님)
- 조회 방식: 직접 DDS END USER 비교 경로 + 단일 기술 사용자·Bearer 토큰 경로
diff --git a/dds-backoffice/src/main/java/com/cloudhandson/ddsbackoffice/web/DdsController.java b/dds-backoffice/src/main/java/com/cloudhandson/ddsbackoffice/web/DdsController.java
index 23482d2..6debfa2 100644
--- a/dds-backoffice/src/main/java/com/cloudhandson/ddsbackoffice/web/DdsController.java
+++ b/dds-backoffice/src/main/java/com/cloudhandson/ddsbackoffice/web/DdsController.java
@@ -39,7 +39,7 @@ public class DdsController {
@GetMapping("/dds")
public String page(Model model) {
- addOptions(model, "both", "PG", null);
+ model.addAttribute("vectorObject", service.vectorObject());
return "dds";
}
diff --git a/dds-backoffice/src/main/resources/templates/dds-home.html b/dds-backoffice/src/main/resources/templates/dds-home.html
index 1358a9f..cf946d0 100644
--- a/dds-backoffice/src/main/resources/templates/dds-home.html
+++ b/dds-backoffice/src/main/resources/templates/dds-home.html
@@ -22,7 +22,7 @@
2 공통 규칙을 DDS 전용 VIEW와 DATA GRANT에 연결합니다. 보호 VIEW별 DATA GRANT와 공통 권한 predicate를 확인합니다. 하나의 기술 사용자에 Bearer 토큰을 연결해 공통 권한을 적용합니다. 저수준 DDS END USER·DATA ROLE 결과를 별도로 확인합니다. 테이블·컬럼·분류값 단위의 DDS 적용 범위를 확인합니다. 주 시나리오는 업무 분류값이 붙은 벡터 지식자료 검색입니다. 원본 테이블은 보조 기술 검증으로만 제공합니다.2. DDS 보호 연결
3. DDS 권한 연결
4. 토큰 권한 검색
5. 직접 END USER 비교
5. 보호 객체 구조
현재 DDS 검증 대상
이 화면은 VPD 데모와 별도로 실행되는 DDS 보조 검증 화면입니다. 실제 시나리오는 세일즈 사용자의 토큰이 `TECH_TAG=SALES`인 지식 청크만 검색하도록 제한하는 것입니다.
+ DEEP DATA SECURITY · KNOWLEDGE POLICY +이 화면의 보호 대상은 PG나 MY 원본이 아닙니다. 벡터화된 지식 청크를 담은 하나의 보호 VIEW와 그 안의 업무 분류값을 대상으로 합니다.
문서를 청킹·임베딩할 때 각 청크의 TECH_TAG에 업무 분류값을 저장합니다. 권한 관리에서는 역할에 허용할 값을 등록하고, DDS Data Grant가 보호 VIEW의 해당 컬럼 값을 predicate로 평가합니다.
예를 들어 세일즈 사용자의 토큰이 업무 사용자 agent_sales로 매핑되고 역할에 ALLOW TAG SALES가 있으면, 검색 결과에는 TECH_TAG에 SALES가 포함된 청크만 남습니다.
세일즈 사용자의 Bearer 토큰은 공통 권한 테이블의 agent_sales로 매핑됩니다. 역할에 ALLOW TAG SALES가 있으면 보호 VIEW의 TECH_TAG 값에 SALES가 포함된 청크만 DDS Data Grant를 통과합니다.
문서가 벡터로 검색된다는 점은 검색 방식이고, 어떤 사용자가 볼 수 있는지는 청크에 저장된 분류값과 권한 규칙이 결정합니다.
Bearer 토큰을 세일즈 업무 사용자로 매핑합니다.
보호 VIEW의 컬럼 값과 공통 권한 규칙을 연결합니다.
보호 VIEW의 행 조건과 컬럼 범위를 선언합니다.
SALES 값이 붙은 청크만 벡터 검색 결과로 반환됩니다.
SALES가 포함된 청크만 남깁니다.
사용자·그룹·역할·데이터 권한은 같은 순서로 설계하고, 문서 청크의 분류값과 보호 VIEW를 DDS Data Grant로 연결합니다.
+ BUSINESS SCENARIO +권한 관리에서 정의한 사용자·역할·규칙이 벡터 지식 검색 결과에 어떻게 적용되는지 확인합니다.
/vector-knowledge에서 기술 사용자 설정을 별도로 확인합니다.
- PG/MY는 제품 시나리오가 아니라 DDS의 객체별 직접 Grant 동작을 확인하기 위한 보조 예제입니다.
-아래 PG/MY 매트릭스는 지식 검색 시나리오와 분리된 DDS 저수준 테스트 데이터입니다.
+ PROTECTED OBJECT +지식 검색 VIEW와 그 안의 분류 컬럼 값을 기준으로 판단합니다.
ADMIN.V_DDS_CUSTOMERS_PG
-| ID | 이름 | 이메일 | 가입일 | 지역 |
|---|---|---|---|---|
| 구성 | 현재 예제 | 권한 판단 | ||
| 1 | -Alice | -alice@example.com | -2026-01-01 | -APAC | -
| 보호 객체 | ADMIN.CB_DDS_VECTOR_SEARCH_DOCUMENTS | 객체별 DATA GRANT | ||
| 행 판단 컬럼 | TECH_TAG | 값에 SALES 포함 여부 | ||
| 업무 규칙 | ALLOW TAG SALES | 공통 CB_PERMISSION_RULE에서 조회 | ||
| 검색 컬럼 | EMBEDDING | 거리 계산에 사용하며 응답에는 반환하지 않음 |
성공한 경우 연결 시점의 SESSION_USER와 ORA_END_USER_CONTEXT를 함께 확인할 수 있습니다. 차단된 경우 DDS가 보호 객체 자체를 숨겨 ORA-00942를 반환하는 것이 정상입니다.
현재 앱은 결과만 읽습니다. 권한 변경은 CREATE DATA ROLE, GRANT DATA ROLE, CREATE DATA GRANT 승인 절차를 거쳐 SQL로 관리합니다.
SALES, HR, FINANCE.TAG 규칙으로 등록합니다.