docs: strengthen DDS protection review criteria

This commit is contained in:
devmrko
2026-06-30 20:13:09 +09:00
parent eea7bf0974
commit 699a1ac127
5 changed files with 227 additions and 34 deletions

View File

@@ -0,0 +1,41 @@
# #606 설계 보완 기준 — 보호 상태·증거 계약
## 목적
DDS 보호 객체 × 집행 경로의 상태를 재현 가능하게 계산한다. 이 계약은 #608 구현의 선행 조건이다.
## 상태 계약
각 상태 응답에는 아래 세 축을 반드시 포함한다.
| 축 | 값 |
|---|---|
| 관측 가능성 | `OBSERVED`, `PARTIAL`, `UNAVAILABLE` |
| 선언 동기화 | `MATCHED`, `NOT_PUBLISHED`, `DRIFTED`, `UNKNOWN` |
| 실행 검증 | `PASSED`, `FAILED`, `STALE`, `NOT_RUN`, `UNKNOWN` |
대표 상태는 `확인 불가 → 조치 필요 → 재검증 필요 → 보호 확인` 순으로 결정하되, 근거 축을 감추지 않는다. `PARTIAL`은 보호 확인으로 승격할 수 없다.
## 기대 명세와 실제 관측
- 토큰 서비스 경로는 기술 사용자, 객체, DATA GRANT/함수/공통 권한 schema version을 immutable 명세로 남긴다.
- 직접 비교 경로는 사용자·Role별 컴파일 결과를 게시 계획 snapshot으로 남긴다.
- 명세에는 `protectionObjectId`, 집행 경로, 객체·컬럼 범위, Role/기술 사용자, canonical predicate hash, 작성 시각, 작성자, 승인 참조, 명세 version을 포함한다.
- canonicalization/hash 정규화 규칙 자체도 schema version으로 보존한다.
- 실제 관측은 catalog capability matrix를 거친다. `DBA_DATA_GRANTS`로 확인되는 grant/object/grantee와 predicate·컬럼 범위를 비교하는 승인된 추가 원천을 구분한다.
- 비교할 수 없는 필드는 `PARTIAL`/`UNKNOWN`으로 처리하며 `MATCHED`로 표시하지 않는다.
## 오류·감사·최신성
- dictionary 권한 부족, 연결 오류, timeout, 빈 inventory, 실제 Grant 없음은 별도의 안전한 오류 code로 구분한다.
- 마지막 관측·마지막 정상 관측·correlation ID·관측 권한 범위를 기록한다.
- 토큰 공통 권한 변경은 런타임 반영, 직접 비교 권한 변경은 별도 게시라는 최신성 계산 규칙을 명시한다.
- 게시 이력은 명세 version/hash, 실행자, 사유, 승인, DB 결과, rollback 참조를 append-only로 보존한다.
## 검증 증거
fixture version, 명세 hash, 집행 경로, 주체 유형, control query, 반환/제외 수, 결과, 시각, 안전한 오류 분류를 기록한다. 검색 0건만으로 권한 차단을 판정하지 않는다.
## 완료 기준
상태 전이/우선순위표, API·persistence schema, catalog capability matrix, hash normalizer, fixture manifest와 sample record를 제공한다. #607·#608·#609가 동일한 contract를 소비할 수 있어야 한다.