Files
vpd-permission-poc/dds-backoffice/README.md
2026-06-29 22:21:41 +09:00

2.9 KiB

DDS Permission Console

dds-backoffice는 기존 VPD 데모와 코드·프로세스·포트·보호 객체를 분리한 Deep Data Security 전용 데모입니다.

  • 기본 포트: 8083
  • 기본 화면: / 또는 /dds
  • 기본 보호 객체: ADMIN.V_DDS_CUSTOMERS_PG, ADMIN.V_DDS_CUSTOMERS_MY
  • DDS 전용 사용자: dds_demo_my, dds_demo_pg, dds_demo_both, dds_demo_none
  • 조회 방식: 선택한 DDS END USER 자격으로 직접 Oracle JDBC 연결

두 데모의 관계

VPD와 DDS는 같은 접근 결과를 비교하기 위한 별도 데모입니다. VPD 인스턴스는 공통 DB 계정으로 접속한 뒤 Bearer 사용자와 권한 테이블을 세션 컨텍스트에 저장하고 VPD 함수가 조건을 계산합니다. 이 앱은 그 경로와 VPD 객체를 재사용하지 않습니다.

데모 사용자 식별 정책 표현 권한 변경
VPD 공통 계정 + Bearer/세션 컨텍스트 동적 predicate 함수 업무 권한 테이블
DDS DDS END USER 또는 보안 컨텍스트 DATA ROLE + DATA GRANT 선언형 DDL/Grant

따라서 DDS는 행·컬럼·작업 제한이라는 결과는 만들 수 있지만, VPD의 Bearer 기반 동적 predicate 실행 모델과 동일한 대체재는 아닙니다.

이 앱의 조회 경계는 다음과 같습니다.

END USER → DATA ROLE → DATA GRANT → V_DDS_CUSTOMERS_* → 조회 결과

ORDS Handler가 Bearer 값을 cb_dds_hr 같은 문자열로 매핑하는 것만으로는 DDS 보안 컨텍스트가 전달되지 않습니다. 따라서 이 비교 인스턴스는 DDS END USER 직접 logon을 검증합니다. Bearer/ORDS 전달이 필요하면 지원 드라이버의 EndUserSecurityContext를 별도 설계해야 합니다.

실행

먼저 DDS 데모 전용 로컬 데이터셋과 권한 객체를 적용합니다. 이 스크립트는 VPD VIEW나 외부 RDS DB Link를 사용하지 않습니다.

sqlplus "$ADB_USER/$ADB_PASSWORD@$ADB_TNS" @sql/adb/31_dds_standalone_demo_setup.sql

그 다음 DDS 인스턴스를 실행합니다.

cd dds-backoffice
export DDS_BACKOFFICE_DB_URL="${BACKOFFICE_DB_URL}"
export DDSUSER_MY_PASSWORD='...'
export DDSUSER_PG_PASSWORD='...'
export DDSUSER_BOTH_PASSWORD='...'
export DDSUSER_NONE_PASSWORD='...'
mvn -DskipTests package
java -jar target/dds-permission-backoffice-0.1.0-SNAPSHOT.jar

관리자 로그인은 DDS_BACKOFFICE_ADMIN_USER / DDS_BACKOFFICE_ADMIN_PASSWORD를 사용합니다. DDS END USER 비밀번호는 서버 환경 변수로만 읽고 화면에 표시하거나 저장하지 않습니다.

VM 배포는 scripts/deploy-dds-backoffice-vm.sh를 사용합니다. 스크립트는 기존 /home/opc/apps/vpd-backoffice의 wallet과 환경값을 읽어 /home/opc/apps/dds-backoffice를 별도 프로세스로 기동합니다. 기본 바인딩은 127.0.0.1:8083이며, 인터넷 공개는 HTTPS reverse proxy와 NSG/firewall 승인을 별도로 거쳐야 합니다.