{ "version": "1.1", "id": "rls-three-preconditions", "title": "격리가 성립하는 세 조건", "question": "RLS 격리는 무엇이 동시에 참이어야 성립하는가?", "type": "sequence", "direction": "LR", "audience": [ "이 저장소의 구조를 읽는 사람" ], "summary": "ENABLE RLS 와 FORCE RLS 와 BYPASSRLS 없는 런타임 롤 셋이 동시에 참이어야 격리가 성립한다.", "alt": "격리 판정이 ENABLE RLS 와 FORCE RLS 와 BYPASSRLS 없는 롤을 차례로 확인하는 순서.", "long_description": "SSOT 는 RlsPolicyVerifier.requireEnforced 가 런타임 롤의 BYPASSRLS 를 확인하고 current_schema() 의 실제 테이블을 순회하며 tenant-scoped 목록에 든 것만 검사한다고 적는다.", "source_context": { "document": "/home/donghyeon/workspace/chat-gpt-container/document-haness/docs/clean-architecture-backend-template/final/document.md", "document_sha256": "8071fe71b3359d9cf60b95909c26c7b50653ce2f22bbc5fcf6988719bb91236d", "anchor": { "kind": "line", "value": 7398, "line": 7398 } }, "composition": { "profile": "sequence", "diagram_only": true, "reference_ids": [ "payment-approval-sequence" ], "rationale": "세 조건이 차례로 확인되어야 격리가 성립한다는 순서가 논지다.", "focus_node": "verifier" }, "groups": [], "nodes": [ { "id": "start", "label": "격리 판정", "kind": "service", "role": "participant", "evidence": [ { "start_line": 7396, "end_line": 7420 } ], "assumption": false }, { "id": "verifier", "label": "RlsPolicyVerifier", "kind": "service", "role": "participant", "evidence": [ { "start_line": 7396, "end_line": 7420 } ], "assumption": false, "emphasis": "primary" }, { "id": "db", "label": "데이터베이스", "kind": "database", "role": "participant", "evidence": [ { "start_line": 7396, "end_line": 7426 } ], "assumption": false } ], "edges": [ { "id": "m1", "from": "start", "to": "verifier", "label": "검증 요청", "kind": "request", "evidence": [ { "start_line": 7396, "end_line": 7420 } ], "assumption": false, "order": 1 }, { "id": "m2", "from": "verifier", "to": "db", "label": "ENABLE RLS 확인", "kind": "request", "evidence": [ { "start_line": 7396, "end_line": 7420 } ], "assumption": false, "order": 2 }, { "id": "m3", "from": "verifier", "to": "db", "label": "FORCE RLS 확인", "kind": "request", "evidence": [ { "start_line": 7396, "end_line": 7420 } ], "assumption": false, "order": 3 }, { "id": "m4", "from": "verifier", "to": "db", "label": "BYPASSRLS 없음 확인", "kind": "request", "evidence": [ { "start_line": 7396, "end_line": 7426 } ], "assumption": false, "order": 4, "emphasis": "primary" } ], "legend": [], "metadata": {} }