From a9c58fa854e38e1e880bc3603323efe34795f0c4 Mon Sep 17 00:00:00 2001 From: devmrko Date: Tue, 30 Jun 2026 14:40:43 +0900 Subject: [PATCH] ui: remove source dataset selector from DDS flow --- dds-backoffice/README.md | 6 +- .../ddsbackoffice/web/DdsController.java | 2 +- .../main/resources/templates/dds-home.html | 3 +- .../src/main/resources/templates/dds.html | 152 +++++------------- 4 files changed, 48 insertions(+), 115 deletions(-) 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

2. DDS 보호 연결

공통 규칙을 DDS 전용 VIEW와 DATA GRANT에 연결합니다.

DDS 보호 객체 확인 →
3

3. DDS 권한 연결

보호 VIEW별 DATA GRANT와 공통 권한 predicate를 확인합니다.

Grant 미리보기·게시 →
4

4. 토큰 권한 검색

하나의 기술 사용자에 Bearer 토큰을 연결해 공통 권한을 적용합니다.

토큰 기반 검색 →
- 5

5. 직접 END USER 비교

저수준 DDS END USER·DATA ROLE 결과를 별도로 확인합니다.

직접 조회 실행 →
+ 5

5. 보호 객체 구조

테이블·컬럼·분류값 단위의 DDS 적용 범위를 확인합니다.

보호 구조 보기 →
@@ -40,7 +40,6 @@

현재 DDS 검증 대상

주 시나리오는 업무 분류값이 붙은 벡터 지식자료 검색입니다. 원본 테이블은 보조 기술 검증으로만 제공합니다.

-
대상보호 방식검증
ADMIN.CB_DDS_VECTOR_SEARCH_DOCUMENTS객체별 분류값 DATA GRANT + 토큰 Context + VECTOR_DISTANCE지식 검색
PG/MY 원본 예제보조 END USER 직접 Grant저수준 검증 열기
diff --git a/dds-backoffice/src/main/resources/templates/dds.html b/dds-backoffice/src/main/resources/templates/dds.html index dcff64f..0b87b0e 100644 --- a/dds-backoffice/src/main/resources/templates/dds.html +++ b/dds-backoffice/src/main/resources/templates/dds.html @@ -1,156 +1,90 @@ - +
- DEEP DATA SECURITY · INDEPENDENT DEMO -

업무 사용자의 지식 접근 범위를 DDS로 확인합니다.

-

이 화면은 VPD 데모와 별도로 실행되는 DDS 보조 검증 화면입니다. 실제 시나리오는 세일즈 사용자의 토큰이 `TECH_TAG=SALES`인 지식 청크만 검색하도록 제한하는 것입니다.

+ DEEP DATA SECURITY · KNOWLEDGE POLICY +

업무 사용자의 지식 접근 범위를 DDS로 제한합니다.

+

이 화면의 보호 대상은 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를 통과합니다.

+

문서가 벡터로 검색된다는 점은 검색 방식이고, 어떤 사용자가 볼 수 있는지는 청크에 저장된 분류값과 권한 규칙이 결정합니다.

-
+
1
IDENTITY

업무 사용자 토큰

Bearer 토큰을 세일즈 업무 사용자로 매핑합니다.

2 -
POLICY

객체별 DATA GRANT

보호 VIEW의 컬럼 값과 공통 권한 규칙을 연결합니다.

+
POLICY

객체별 DATA GRANT

보호 VIEW의 행 조건과 컬럼 범위를 선언합니다.

3 -
3EVIDENCE

허용된 지식

SALES 값이 붙은 청크만 벡터 검색 결과로 반환됩니다.

+
3VALUE

TECH_TAG 값

SALES가 포함된 청크만 남깁니다.

- SAME MANAGEMENT FLOW -

VPD 데모와 같은 권한 관리 흐름

-

사용자·그룹·역할·데이터 권한은 같은 순서로 설계하고, 문서 청크의 분류값과 보호 VIEW를 DDS Data Grant로 연결합니다.

+ BUSINESS SCENARIO +

세일즈 사용자의 지식 검색

+

권한 관리에서 정의한 사용자·역할·규칙이 벡터 지식 검색 결과에 어떻게 적용되는지 확인합니다.

+ 토큰 지식 검색 열기
-
- DDS 직접 비교 사용자의 비밀번호가 설정되지 않았습니다. 주 시나리오인 토큰 검색은 /vector-knowledge에서 기술 사용자 설정을 별도로 확인합니다. -
- -
- 저수준 PG/MY DDS 예제 열기 -
-
-
- 1 · SECURITY SUBJECT -

저수준 DDS 직접 검증

-

PG/MY는 제품 시나리오가 아니라 DDS의 객체별 직접 Grant 동작을 확인하기 위한 보조 예제입니다.

-
-
-
- - - - - -
-
-
-
- 2 · EXPECTED MATRIX -

보조 원본 권한 매트릭스

-

아래 PG/MY 매트릭스는 지식 검색 시나리오와 분리된 DDS 저수준 테스트 데이터입니다.

+ PROTECTED OBJECT +

테이블·컬럼·값 단위의 보호 범위

+

지식 검색 VIEW와 그 안의 분류 컬럼 값을 기준으로 판단합니다.

-
-
dds_demo_myMY 데이터셋 허용PG 객체는 ORA-00942
-
dds_demo_pgPG 데이터셋 허용MY 객체는 ORA-00942
-
dds_demo_bothPG + MY 허용두 DATA GRANT 모두 적용
-
dds_demo_none접속만 허용데이터 권한 없음 · default deny
-
-
-
- -
-
-
- 3 · EVIDENCE -

조회 결과

-

ADMIN.V_DDS_CUSTOMERS_PG

-
- 상태 -
-
- 결과 - 메시지 - -
-
-
SESSION_USER-
-
ORA_END_USER_CONTEXT-
-
반환 행0
-
-
+
- + - - - - - - - + + + +
ID이름이메일가입일지역
구성현재 예제권한 판단
1Alicealice@example.com2026-01-01APAC
보호 객체ADMIN.CB_DDS_VECTOR_SEARCH_DOCUMENTS객체별 DATA GRANT
행 판단 컬럼TECH_TAG값에 SALES 포함 여부
업무 규칙ALLOW TAG SALES공통 CB_PERMISSION_RULE에서 조회
검색 컬럼EMBEDDING거리 계산에 사용하며 응답에는 반환하지 않음
-
조회 조건을 통과한 행이 없습니다.
-
- 판정 근거와 운영 메모 -

성공한 경우 연결 시점의 SESSION_USERORA_END_USER_CONTEXT를 함께 확인할 수 있습니다. 차단된 경우 DDS가 보호 객체 자체를 숨겨 ORA-00942를 반환하는 것이 정상입니다.

-

현재 앱은 결과만 읽습니다. 권한 변경은 CREATE DATA ROLE, GRANT DATA ROLE, CREATE DATA GRANT 승인 절차를 거쳐 SQL로 관리합니다.

-
+
+ +
+
+
+ IMPLEMENTATION +

추가·수정할 때의 기준

+
+
+
    +
  1. 문서 청킹·임베딩 시 청크에 업무 분류값을 저장합니다. 예: SALES, HR, FINANCE.
  2. +
  3. 권한 관리에서 역할에 허용할 분류값을 TAG 규칙으로 등록합니다.
  4. +
  5. 보호 VIEW별 Data Grant predicate가 해당 컬럼 값을 공통 권한체계와 비교합니다.
  6. +
  7. 세일즈 토큰, 다른 부서 토큰, invalid token으로 결과를 회귀 검증합니다.
  8. +
+

권한 관리에서 규칙을 확인하고, 지식 검색에서 실제 반환 청크를 확인하세요.