Files
vpd-permission-poc/docs/design/dds-protection-connection-review/606-security-design.md
2026-06-30 20:13:09 +09:00

42 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# #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를 소비할 수 있어야 한다.