#!/usr/bin/env bash # ============================================================ # run.sh — VPD Permission POC 원클릭 오케스트레이터 # # 사용법: # ./run.sh # = ./run.sh all # ./run.sh prereq # 도구 존재 / .env 변수만 검증 # ./run.sh source # 원격 PG + MySQL 에 customers 테이블/seed 생성 # ./run.sh adb # ADB 측 cleanup → dblinks → perm/ctx/view/policy → end_users # ./run.sh tests # 4-user (my/pg/both/none) 로 접속해서 행 필터 검증 # ./run.sh audit # admin 으로 정책/뷰/유저 상태 점검 # ./run.sh all # source → adb → tests → audit # ./run.sh teardown # ADB 측 객체 + 원격 link/cred 만 정리 (원격 PG/MySQL 데이터는 보존) # # (선택) 26ai Deep Data Security 변형 — VPD 데모와 공존하며 같은 4-user 매트릭스를 재구현: # ./run.sh dds-setup # 13_dds_variant.sql 적용 (END USER + DATA ROLE + DATA GRANT) # ./run.sh dds-tests # 4명 ddsuser_* 로 매트릭스 검증 # ./run.sh dds # dds-setup → dds-tests # ./run.sh dds-teardown # DDS 객체만 정리 (VPD 데모는 보존) # # 환경설정: # cp .env.example .env → 값 채우고 → ./run.sh # ============================================================ set -Eeuo pipefail ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$ROOT" # --- 1) .env 로드 --- if [[ ! -f "$ROOT/.env" ]]; then echo "[FAIL] .env 가 없습니다. cp .env.example .env 후 값을 채워주세요." >&2 exit 1 fi # shellcheck disable=SC1091 set -a; . "$ROOT/.env"; set +a # --- 2) 공용 함수 로드 --- # shellcheck disable=SC1091 . "$ROOT/scripts/lib/common.sh" CMD="${1:-all}" # ============================================================ # 헬퍼: ADB sqlplus 한 번 호출 # 인자: $1 = SQL 파일 경로 (DEFINE 변수는 환경변수에서 합성) # ADB_PASSWORD 가 비어있으면 prompt. # ============================================================ run_sqlplus_file() { local sql_file="$1" [[ -f "$sql_file" ]] || die "SQL 파일 없음: $sql_file" log "sqlplus ← $sql_file" # heredoc 으로 DEFINE 주입 후 @sql_file 실행. # 비번은 stdin 으로 흘려보내고 셸 트레이스/echo 에 안 남게 한다. sqlplus -S -L "${ADB_USER}/${ADB_PASSWORD}@${ADB_TNS}" <