# 함수 명세: `compileDdsPublishPlan` (#617) > **상태**: Draft · **분류**: 복잡 — 권한 컴파일·DDL diff·안전 검증 ## 책임 DDS 백오피스의 보호 객체, 접근 역할, 테이블 세부 권한, 사용자/그룹 할당을 실행 가능한 DDS DDL diff로 바꾼다. ## 시그니처 `DdsAuthorizationDraft -> DdsPublishPlan` ## 규칙 1. 그룹을 포함해 역할별 유효 사용자를 계산한다. 2. `CB_APP_USER.userId`마다 ASCII `DDS_U_` END USER 이름을 결정한다. 3. 접근 역할마다 하나의 stable DATA ROLE 이름을 결정한다. 4. 사용자·역할·객체·세부 권한의 현재 게시 상태와 목표 상태를 비교한다. 5. 생성/교체/회수 DDL과 예상 영향 사용자·객체를 계산한다. 6. 행 조건 DSL은 whitelist 기반 compiler만 사용한다. raw SQL은 거부한다. 7. `DENY` 또는 지원하지 않는 권한 조합은 plan 생성 단계에서 오류로 끝낸다. ## 출력 - END USER 생성/활성화/비활성화 목록 - DATA ROLE 생성/역할 부여/회수 목록 - DATA GRANT 생성·교체·삭제 목록 - 예상 영향 사용자·객체·컬럼 matrix - 이전/목표 fingerprint와 승인 대상 diff ## 실패 충돌, 비활성 객체, DSL 오류, DENY 규칙, 이름 충돌은 게시 전에 차단한다.