# 함수 명세: `compileDdsPublishPlan` (#617)

> **상태**: Superseded by runtime authorization provisioning · 기존 사용자별 publish PoC 설명

## 책임

DDS 백오피스의 보호 Object·CRUD·컬럼 그룹 메타데이터를 실행 가능한 장기 DDS DDL diff로 바꾼다. 사용자·그룹·역할·퍼미션 값은 런타임 권한 함수가 평가하므로 이 계획이 사용자별 Grant를 만들지 않는다.

## 시그니처

`DdsAuthorizationDraft -> DdsPublishPlan`

## 규칙

1. Object/CRUD/컬럼 그룹별 고정 DATA GRANT 이름과 컬럼 목록을 결정한다.
2. 각 Grant predicate가 `ORA_END_USER_CONTEXT.username`과 whitelist 상수를 `can_access`에 전달하도록 생성한다.
3. `DDS_MCP_RUNTIME` DATA ROLE과 local END USER provisioning 상태를 비교한다.
4. Object·컬럼·CRUD 메타데이터 변경만 DDL diff로 계산한다.
5. 사용자·그룹·역할·퍼미션 값 변경은 DDL diff에 포함하지 않는다.
6. raw SQL과 caller 제공 identifier는 거부한다.

## 출력

- 신규 END USER provisioning 및 공통 DATA ROLE 부여 목록
- Object/CRUD/컬럼 그룹별 DATA GRANT 생성·교체·삭제 목록
- 권한 함수/권한 테이블 prerequisite와 예상 영향 Object·컬럼 matrix
- 이전/목표 fingerprint와 승인 대상 diff

## 실패

충돌, 비활성 객체, DSL 오류, DENY 규칙, 이름 충돌은 게시 전에 차단한다.
