Security Policy는 에이전트가 자발적으로 지켜야 하는 가이드가 아니라 런타임 강제 정책입니다. 현재 정책은 Query/DML 실행과 runtime limiter에서 직접 사용됩니다.
2.0.2 정책 필드
| 필드 | 기본값 | 유효 범위 / 의미 |
|---|---|---|
QueryMaxRows | 1000 | 1–100,000 |
QueryTimeoutSeconds | 30 | 1–600초 |
RequireWhereForUpdate | true | UPDATE predicate 요구 |
RequireWhereForDelete | true | DELETE predicate 요구 |
AllowFullTableUpdate | false | full-table UPDATE 명시적 허용 |
AllowFullTableDelete | false | full-table DELETE 명시적 허용 |
DmlMaxAffectedRows | 100 | 1–1,000,000 |
KeyPermitLimit | 120 | 설정된 key window당 1–1,000,000 요청 |
KeyWindowSeconds | 60 | 1–86,400초 |
MaxConcurrentSql | 16 | 1–10,000 동시 SQL 작업 |
서비스는 범위를 벗어난 값을 다른 값으로 조용히 보정하지 않고 거부합니다.
Admin 권한
| 작업 | 권한 |
|---|---|
| 현재 정책 조회 | /runtime/security → view |
| 정책 수정 | /runtime/security → edit |
정책을 수정하면 감사 이벤트가 기록되고 런타임 정책 상태가 즉시 교체됩니다. 또한 설정된 security-policy synchronization provider를 통해 변경이 게시되어 분산 배포의 여러 인스턴스에 전파될 수 있습니다.
Query 제한
QueryMaxRows는 compiler/runtime policy를 통해 Query 결과량을 제한합니다. QueryTimeoutSeconds는 런타임 Query timeout 계약을 제어합니다. 둘 다 서버 측 제약이므로 클라이언트가 스스로 LIMIT이나 cancellation을 추가하는지에 의존하지 않습니다.
UPDATE 및 DELETE predicate
기본 정책은 UPDATE와 DELETE에 predicate를 요구하고 full-table mutation을 허용하지 않습니다.
Full-table 허용은 명시적입니다. RequireWhereForUpdate를 끄는 것과 AllowFullTableUpdate를 켜는 것은 같은 의도가 아닙니다. 운영 워크플로가 실제로 광범위한 mutation을 요구하지 않는 한 보수적인 기본값을 유지하십시오.
DML affected-row 상한
DmlMaxAffectedRows는 mutation 영향 범위를 제한합니다. Safe DML 승인 protocol을 대체하는 것이 아니라 추가로 적용됩니다. Mutation은 여전히 parse/validate/compile을 통과해야 하며 MCP DML 경로에서는 승인 및 commit-time revalidation까지 완료해야 합니다.
자세한 내용은 Safe DML을 참고하십시오.
MCP-key rate limit
Security Policy는 키별 기본 permit limit/window를 제공합니다. 개별 MCP 키는 다음 중 하나를 선택할 수 있습니다.
- 정책 상속
- custom override
- 명시적 unlimited
키별 mode는 MCP 키를 참고하십시오.
SQL concurrency
MaxConcurrentSql은 런타임 SQL 동시 실행 제한입니다. 이 제한이 process-local인지 여러 인스턴스에 걸쳐 조정되는지는 설정된 SQL concurrency provider에 따라 달라집니다.
클러스터 전체를 하나의 제한으로 다뤄야 한다면 distributed provider를 사용하십시오.