docs: add generic MCP VPD operations guide

This commit is contained in:
devmrko
2026-08-03 13:28:53 +09:00
parent 750bfbab5b
commit 8817b24043
2 changed files with 104 additions and 0 deletions

View File

@@ -61,3 +61,11 @@ docs/
`Draft`(작성) → `Approved`(QA/Reviewer 통과 후) → `Superseded`(대체 시 상단 표기, 삭제 금지).
구현이 설계서와 달라지면 **코드가 아니라 설계서를 먼저 고치고** 다시 구현한다.
```
# 문서 안내
## 공통 운영 문서
- [MCP·VPD·Data Redaction·DDS 공통 운영 가이드](runbooks/mcp-vpd-redaction-dss-operations.md): 고객사와 무관한 구성, 적용, 검증, 롤백 기준
- [SQLcl VPD 배포·검증·롤백 런북](runbooks/460-sqlcl-vpd-deploy-runbook.md): DB 적용과 장애 점검 절차
고객사별 데이터 모델, MCP 도구, 질의 예제는 `main`이 아니라 해당 고객사 브랜치에서 관리한다.

View File

@@ -0,0 +1,96 @@
# MCP·VPD·Data Redaction·DDS 공통 운영 가이드
## 1. 적용 범위와 책임
이 문서는 고객사와 데이터 도메인에 무관하게 사용하는 공통 운영 절차다. 고객별 테이블,
지표, 질문 예제, Select AI 프로파일은 각 고객사 브랜치 문서에서 관리한다.
| 구성요소 | 책임 | 운영자가 확인할 것 |
| --- | --- | --- |
| MCP | 허용 도구를 공개하고 요청·응답 계약을 제공 | `tools/list`, 입력 스키마, 인증 |
| Select AI | 읽기 전용 SQL 생성 및 실행 | 허용 객체, SQL 검증, timeout |
| VPD | 행 단위 접근 제어 | session context, policy, predicate |
| Data Redaction (ASO) | 민감 컬럼 값의 NULL/마스킹 | 대상 컬럼, policy, 예외 사용자 |
| DDS | 선언형 행·컬럼·작업 권한 | END USER, DATA ROLE, DATA GRANT |
| FGA | 실행 증적 감사 | 요청 식별자, SQL, RLS 정보 |
VPD와 Data Redaction은 서로 대체하지 않는다. VPD는 **어떤 행을 볼 수 있는지**,
Data Redaction은 허용된 행에서 **컬럼 값을 어떻게 표시할지**를 담당한다. DDS는
`DATA GRANT`로 행·컬럼 권한을 선언적으로 적용하는 별도 경로다.
## 2. 공통 실행 흐름
```text
사용자/Agent
→ MCP initialize · tools/list · tools/call
→ Bearer 또는 서비스 인증 검증
→ 허용된 도구와 입력 스키마 확인
→ DB session context 또는 DDS END USER context 설정
→ Select AI SHOWSQL 생성
→ SELECT/WITH 전용 검증과 read-only 실행
→ VPD 행 필터 + Data Redaction 또는 DDS 권한 적용
→ 결과·생성 SQL·감사 식별자 반환
```
MCP 또는 애플리케이션은 사용자 입력을 VPD predicate나 SQL 조각으로 조합하지 않는다.
권한 판단은 DB 정책·권한 테이블·DDS grant에서 수행한다.
## 3. 최초 구성 순서
1. `database/adb/`의 기본 스키마, 권한 테이블, 보호 View를 적용한다.
2. VPD context package·policy function을 compile하고 `DBA_POLICIES`에서 적용 대상을 확인한다.
3. 민감 컬럼에는 Data Redaction policy를 적용하고 권한별 조회 결과를 확인한다.
4. DDS를 사용할 경우 END USER, DATA ROLE, DATA GRANT를 별도 구성한다. 단순 Bearer 값 조회만으로 DDS END USER가 되지 않는다.
5. MCP endpoint와 공개 도구 목록을 설정한다. 광고한 모든 도구는 실제로 호출 가능해야 한다.
6. SELECT/WITH 이외 문장 차단, read-only transaction, query timeout, 반환 행 제한을 설정한다.
7. 사용자별 허용/거부, 마스킹, 감사 증적을 회귀 검증한다.
## 4. MCP 운영 절차
### 기동 전
- 환경변수·DB 연결·wallet·MCP endpoint를 점검한다.
- 도구 이름, 설명, 입력 스키마가 실제 구현과 일치하는지 확인한다.
- 실제 token, password, wallet, 대화 이력 DB는 Git에 넣지 않는다.
### 요청 처리
1. `initialize` 후 협상된 프로토콜 버전을 사용한다.
2. `tools/list` 결과 중 승인된 도구만 호출한다.
3. `tools/call` 입력을 서버에서 검증한다.
4. 생성 SQL과 실행 결과, 오류 사유를 분리해 반환한다.
5. 실패 시 임의 SQL 재시도 대신 도구 상세·SHOWPROMPT·DB audit을 확인한다.
## 5. VPD와 Data Redaction 점검
| 증상 | 우선 확인 |
| --- | --- |
| 권한 있는데 0행 | session context, VPD predicate, 권한 매핑 |
| `ORA-00942`/`ORA-01031` | DB object grant와 보호 View 노출 여부 |
| 컬럼이 NULL/마스킹됨 | Data Redaction policy와 예외 조건 |
| 다른 사용자 결과가 같음 | Bearer→업무 사용자 매핑, context clear |
| 요청 추적 불가 | `CLIENT_IDENTIFIER`, FGA/Unified Audit Trail |
VPD 정책 변경 전에는 대상 View·TABLE, 기존 policy, 함수 상태를 백업하고, 변경 후
허용 사용자·거부 사용자·마스킹 예외 사용자를 모두 조회한다. 롤백은 policy/function 및
권한 매핑을 직전 검증 상태로 되돌린 뒤 같은 회귀 시나리오로 확인한다.
## 6. DDS 사용 기준
- 사용자별 `END USER` context를 실제 DB 호출에 전달할 수 있으면 DDS를 고려한다.
- 서비스 계정의 client-credentials token은 서비스 인증용이며 업무 사용자 권한을 뜻하지 않는다.
- 권한이 자주 바뀌면 사용자별 grant 복제보다 공통 role과 런타임 권한 함수를 검토한다.
- VPD와 DDS를 같은 보호 객체에 함께 적용할 때는 정책 순서와 예상 결과를 별도 검증한다.
## 7. 검증과 증적
최소 검증 세트는 다음과 같다.
1. 인증 성공/실패와 `tools/list` 계약
2. 허용 사용자와 거부 사용자의 행 수 차이
3. 민감 컬럼의 Redaction 결과
4. 읽기 전용 SQL 차단 규칙과 timeout
5. FGA 또는 Unified Audit Trail의 SQL·RLS 정보·요청 식별자
상세 SQLcl 절차는 [VPD 배포·검증·롤백 런북](460-sqlcl-vpd-deploy-runbook.md)을,
설계 근거는 [ORDS·VPD·DDS 보안 설계](../06-agent-ords-vpd-dds-security-brief.md)를 따른다.