# 함수 명세: `publishDdsPlan` 및 `verifyDdsIsolation` (#617) > **상태**: Draft · **분류**: 보호 Object provisioning·검증·드리프트 ## 책임 승인된 Object/CRUD/컬럼 그룹 provisioning DDL을 멱등 실행하고, dictionary와 representative END USER matrix로 실제 결과를 확인한다. 권한 값 변경 자체는 이 함수를 호출하지 않는다. ## 시그니처 - `DdsPublishPlan, Reason -> DdsPublishRun` - `DdsPublishRun -> DdsVerificationResult` ## 게시 규칙 1. 승인 사유와 diff fingerprint가 없으면 게시하지 않는다. 2. Publisher lock으로 같은 보호 객체의 동시 provisioning을 막는다. 3. 공통 Data Role, 신규 END USER, 함수 prerequisite, Data Grant를 dependency 순서로 적용한다. 4. 각 DDL 결과와 Oracle 오류를 `DdsPublishRun`에 기록한다. 5. 중간 실패 시 성공으로 표시하지 않는다. 부분 적용 상태로 기록하고 drift로 승격한다. ## 검증 규칙 1. `DBA_END_USERS`, `DBA_DATA_ROLES`, `DBA_DATA_ROLE_GRANTS`, `DBA_DATA_GRANTS`를 목표 fingerprint와 비교한다. 2. 대표 사용자별 Context, 객체 접근, 행, 컬럼 결과를 검증한다. 3. 권한 테이블의 ALLOW/DENY·역할 변경이 DDL 없이 다음 SQL에 반영되는지 검증한다. 4. Context attach/clear 격리 검증이 실패하면 publish 결과를 정상으로 표시하지 않는다. ## 실패 게시·검증 실패는 `FAILED` 또는 `DRIFT` 상태다. MCP 요청 경로는 마지막 성공 게시 상태를 우회 권한으로 사용하지 않는다.