本卡為 FR-094 母案。把 FR-087 盤點(CM-1663)查出的 13 張表+4 支 view 的租戶隔離(RLS)補齊並打開,7 棒切分(其中 CM-1559 是既有 In progress 卡,不新開)。只套 DEV+基線庫,STG/POC 等放行。子卡清單在末段。
我們的產品是多家客戶(租戶)共用一套系統,靠資料庫的 RLS(Row Level Security,資料庫自己擋、讓每個客戶只查得到自己的資料)做隔離。2026-09-11 決策者親測:原廠帳號切到子租戶後,仍看得到別家的待辦任務(應 0 筆實 39 筆)與專案(應 0 筆實 213 筆)。FR-087 盤點後結論:13 張表、4 支 view 的隔離實際上是關的——有的規則寫好了但開關沒開,有的連規則都沒寫,有的 view 用「建立者身分」查底層而繞過隔離。本案就是把這些一張一張補齊、打開,並確認打開後既有功能(登入、切租戶、我的任務、兩支凌晨排程)都還活著。
user_roles/user_tenants 是「誰能切到哪個租戶」的名冊,完全沒隔離)。第一版是落地版(單客戶),但 SaaS 預留,隔離必須在出貨前是對的形狀。X-Tenant-ID: 0;CM-1661/1664 修 users 表本人可見。這一波補的是「表級開關」與「view 繞過」,是 FR-087(CM-1663)盤點的直接後續。app_tenant_allowed_for_session helper(scripts/init/02-schema.sql:623,12+ 張表共用;改它等於全部子租戶看到母租戶全部資料)。既有三張(flow_templates 用 is_builtin、module_frames/detection_profiles 用 scope='SYSTEM')不回改;本案新開旗標的表一律用 scope(SYSTEM/TENANT)。surveys/survey_folders 不加公版旗標(引用形狀是複製進任務,DEV 跨租戶引用 0)。要修的是 survey schema 另外 12 張沒 RLS、沒 tenant_id 的裸表(survey_questions/survey_pages/task_surveys/question_answers/各 _trans/histories/discussions/ref_items),走 .3a,方案(加 tenant_id 回填 vs JOIN-based policy)由該棒實查後回寫首腦定。scripts/sql/2026-06-25-align-poc-to-stg-view-eventtrigger-projects-rls.sql:124,commit e7709295),不是產品決策。走正規:4 條 policy 補 is_super_admin OR 分支(現況 projects_select 只有 app_tenant_allowed_for_session(tenant_id),02-schema.sql:24078)→ ENABLE RLS → DEV 造跨租戶指派樣本驗(DEV 221 筆專案全屬 tenant 102,不造樣本測不出來)→ 重產基線 02。job_executions(core/scheduler.py:386)、01:00 框架解析清理掃 framework_parse_jobs(core/scheduler.py:202)——靠「無身分=super admin」跑(jedi-common db.py:115-119 的 elif is_pg: 分支),那正是 CM-1559 要收緊的洞。所以 .1a 先給這兩支排程具名系統身分 → 再收 CM-1559 → 再開 .2c(job_executions/framework_parse_jobs)。反過來清理程式會安靜失效不報錯。viewer_is_platform_admin() 走的是 _session_paths_have_root(我是最上層租戶,隔離規則允許上層看下層),不是靠隔離沒開。開隔離不會弄壞平台後台。core/scheduler.py+jedi-common 或 jedi-iam 1~2 檔)— 順序硬相依的起點;產出「排程 tick 內顯式建系統 context」寫法+守衛「排程 tick 不得在無 context 下呼叫 session_scope」。db.py+jedi-iam signed_token.py,併 jedi 1.1.0)— 不新開;前置 .1a,後續 .2c。tenant_drive_integrations 開開關;projects 補 super_admin 分支+開(吸收 CM-1453);DEV 造跨租戶指派樣本驗。純開關,可立刻派。user_roles/user_tenants/user_org_units 三張補 policy+開(吸收 CM-1445);要驗切租戶與授權查詢仍通。與 .2a 無檔案衝突,可平行。poams/evidence_classification_runs/evidence_classification_ground_truth/job_executions/framework_parse_jobs 補 4 條+開;information_systems DEV 已開(jedi-asset 002)、要驗基線庫對齊。前置 .1a 與 CM-1559。workflow_executions 補 select policy+開;4 支 view 加 security_invoker = true;同一輪驗「我的任務」頁與能力點守門。