docs: clarify independent VPD and DDS demos

This commit is contained in:
devmrko
2026-06-29 22:14:12 +09:00
parent 1aaffb6247
commit 9eccf98e11
3 changed files with 57 additions and 8 deletions

View File

@@ -1,15 +1,22 @@
# DDS Permission Console # DDS Permission Console
`dds-backoffice`는 기존 VPD 백오피스와 코드·프로세스·포트를 분리한 Deep Data Security 전용 인스턴스입니다. `dds-backoffice`는 기존 VPD 데모와 코드·프로세스·포트·보호 객체를 분리한 Deep Data Security 전용 데모입니다.
- 기본 포트: `8083` - 기본 포트: `8083`
- 기본 화면: `/` 또는 `/dds` - 기본 화면: `/` 또는 `/dds`
- 기본 보호 객체: `ADMIN.V_DDS_CUSTOMERS_PG`, `ADMIN.V_DDS_CUSTOMERS_MY` - 기본 보호 객체: `ADMIN.V_DDS_CUSTOMERS_PG`, `ADMIN.V_DDS_CUSTOMERS_MY`
- 조회 방식: 선택한 DDS `END USER` 자격으로 직접 Oracle JDBC 연결 - 조회 방식: 선택한 DDS `END USER` 자격으로 직접 Oracle JDBC 연결
## VPD 인스턴스와의 차이 ## 두 데모의 관계
VPD 인스턴스는 공통 DB 계정으로 접속한 뒤 Bearer 사용자와 권한 테이블을 세션 컨텍스트에 저장하고 VPD 함수가 조건을 계산합니다. 이 앱은 그 경로를 재사용하지 않습니다. VPD와 DDS는 같은 접근 결과를 비교하기 위한 별도 데모입니다. VPD 인스턴스는 공통 DB 계정으로 접속한 뒤 Bearer 사용자와 권한 테이블을 세션 컨텍스트에 저장하고 VPD 함수가 조건을 계산합니다. 이 앱은 그 경로와 VPD 객체를 재사용하지 않습니다.
| 데모 | 사용자 식별 | 정책 표현 | 권한 변경 |
|---|---|---|---|
| VPD | 공통 계정 + Bearer/세션 컨텍스트 | 동적 predicate 함수 | 업무 권한 테이블 |
| DDS | DDS `END USER` 또는 보안 컨텍스트 | `DATA ROLE` + `DATA GRANT` | 선언형 DDL/Grant |
따라서 DDS는 행·컬럼·작업 제한이라는 결과는 만들 수 있지만, VPD의 Bearer 기반 동적 predicate 실행 모델과 동일한 대체재는 아닙니다.
이 앱의 조회 경계는 다음과 같습니다. 이 앱의 조회 경계는 다음과 같습니다.

View File

@@ -21,13 +21,13 @@
<main class="container py-4"> <main class="container py-4">
<header class="hero"> <header class="hero">
<span class="eyebrow">DEEP DATA SECURITY · DIRECT END USER</span> <span class="eyebrow">DEEP DATA SECURITY · INDEPENDENT DEMO</span>
<h1>선언형 데이터 권한을 실제 조회로 확인합니다.</h1> <h1>같은 접근 결과를 다른 보안 모델로 확인합니다.</h1>
<p class="lead">VPD 트랙과 분리된 DDS 전용 인스턴스입니다. 선택한 END USER로 직접 접속해 Oracle의 DATA ROLE과 DATA GRANT가 적용된 결과를 보여줍니다.</p> <p class="lead">이 화면은 VPD 데모와 별도로 실행되는 DDS 전용 데모입니다. 선택한 END USER로 직접 접속해 Oracle의 DATA ROLE과 DATA GRANT가 적용된 결과를 보여줍니다.</p>
<details class="explanation"> <details class="explanation">
<summary>이 화면의 보안 경계</summary> <summary>이 화면의 보안 경계</summary>
<p>이 인스턴스는 VPD 권한 테이블을 읽어 조건을 계산하지 않습니다. <code>END USER → DATA ROLE → DATA GRANT → 보호 VIEW</code>가 전부 Oracle DDS에 선언되어 있고, 조회 결과는 그 선언의 적용 결과입니다.</p> <p>이 인스턴스는 VPD 권한 테이블을 읽어 조건을 계산하지 않습니다. <code>END USER → DATA ROLE → DATA GRANT → 보호 VIEW</code>가 전부 Oracle DDS에 선언되어 있고, 조회 결과는 그 선언의 적용 결과입니다.</p>
<p class="mb-0">Bearer 키를 ORDS Handler에서 사용자 이름으로 바꾸는 것만으로는 DDS 보안 컨텍스트가 만들어지지 않습니다. 그래서 이 비교 트랙은 직접 END USER logon을 검증합니다.</p> <p class="mb-0">두 데모는 같은 접근 매트릭스를 비교하지만 실행 모델은 다릅니다. VPD는 공통 계정·Bearer·동적 predicate를 사용하고, DDS는 직접 END USER와 선언형 DATA GRANT를 사용합니다. Bearer 키를 ORDS Handler에서 사용자 이름으로 바꾸는 것만으로는 DDS 보안 컨텍스트가 만들어지지 않습니다.</p>
</details> </details>
</header> </header>
@@ -94,7 +94,7 @@
<div> <div>
<span class="eyebrow">2 · EXPECTED MATRIX</span> <span class="eyebrow">2 · EXPECTED MATRIX</span>
<h2>원본별 권한 매트릭스</h2> <h2>원본별 권한 매트릭스</h2>
<p>VPD와 같은 4가지 업무 사례를 DDS 선언형 권한으로 재현합니다.</p> <p>VPD 데모와 같은 결과를 별도 데이터·권한 객체에서 DDS 선언형 모델로 비교합니다.</p>
</div> </div>
</div> </div>
<div class="matrix-grid"> <div class="matrix-grid">

View File

@@ -0,0 +1,42 @@
# 독립 VPD·DDS 데모 구성
## 목적
VPD와 Oracle Deep Data Security(DDS)를 한 애플리케이션에 섞지 않고, 같은 접근 결과를 서로 다른 DB 보안 모델로 비교한다.
## 인스턴스 경계
| 구분 | VPD Demo | DDS Demo |
|---|---|---|
| 실행 디렉터리 | `/home/opc/apps/vpd-backoffice` | `/home/opc/apps/dds-backoffice` |
| 기본 포트 | `8082` | `8083` |
| 사용자 식별 | 공통 DB 계정 + Bearer/세션 컨텍스트 | DDS `END USER` 직접 logon |
| 권한 기준 | 업무 권한 테이블 + VPD 함수 | `DATA ROLE` + `DATA GRANT` |
| 보호 객체 | `V_CUSTOMERS_*` / VPD 전용 객체 | `V_DDS_CUSTOMERS_*` / DDS 전용 객체 |
| 운영 프로세스 | VPD start/stop/status | DDS start/stop/status |
두 인스턴스는 화면, JAR, PID, 로그, 설정 파일을 공유하지 않는다. DDS 데모는 VPD 권한 테이블이나 VPD 정책 함수에 의존하지 않는다.
## 동일하게 비교할 수 있는 것
- 사용자별 원본 접근 범위
- 행 단위 허용/차단
- 권한 없는 사용자의 default deny
- 보호 VIEW 우회 시도 차단
## 동일하게 간주하면 안 되는 것
- VPD의 공통 DB 계정 + Bearer + 동적 predicate 흐름
- 업무 권한 테이블을 매 요청마다 읽는 동적 변경 방식
- ORDS Handler가 Bearer 값을 DDS 사용자명으로 바꾸는 것만으로 DDS 컨텍스트가 생기는 동작
DDS는 직접 `END USER`로 접속하거나 지원 드라이버가 `EndUserSecurityContext`를 전달해야 한다. 따라서 DDS 데모의 조회 결과가 VPD와 같더라도, 권한이 계산·전달되는 경로는 별도로 설명해야 한다.
## 실행 확인
```bash
/home/opc/apps/vpd-backoffice/status.sh
/home/opc/apps/dds-backoffice/status.sh
```
외부 공개 포트는 애플리케이션 분리와 별개의 운영 변경이다. DDS 기본 바인딩은 `127.0.0.1:8083`이며, 직접 공개하려면 HTTPS, NSG, VM firewalld 정책을 별도로 승인한다.