Appearance
SQL Editor
對應主管要求 ① 全公司 SQL 變更審計 + ② 零信任 + ③ DBA SOP 內建。
SQL Editor 是 Argus 給「不走 Plan 流程的互動 SQL」唯一受審計的入口。每一次查詢、每一次匯出、每一個管理命令,都會留下 audit 軌跡與規則合規檢查紀錄。
是什麼
SQL Editor 是平台內建的線上 SQL 介面,提供三條互動執行路徑:
| 路徑 | RPC | 用途 | 典型場景 |
|---|---|---|---|
| Query | argus.v1.SQLService/Query | 跑 SELECT,回傳 rows | 開發者查資料、Auditor 對帳、DBA 調查問題 |
| AdminExecute | argus.v1.SQLService/AdminExecute | DBA 模式直接執行 DDL / DML(streaming) | 緊急救火、特殊運維 |
| Export | argus.v1.SQLService/Export | 跑 SELECT → 直接出 CSV / JSON / SQL / XLSX | 報表匯出、稽核取證 |
三條路徑共用同一套權限、masking、advisor、audit 機制。差別只在 streaming 模式(AdminExecute)與輸出形式(Export)。
為什麼存在
| 痛點 | SQL Editor 怎麼解 |
|---|---|
開發者要查資料就要 ssh / psql 直連 → 沒 audit、沒 masking | 把所有互動 SQL 收口到平台 |
| DBA 緊急場景要繞 Plan 流程 → 失去軌跡 | AdminExecute 模式保留審計但不卡 Plan |
| 個別 client 工具不會跑公司 lint 規則 | Plan / Release / Issue 已跑的 advisor 規則庫,現在互動 path 也跑(A2 PR-1) |
| 報表匯出散落多個工具 | Export RPC 統一輸出 |
三道保護機制
每一次互動執行同時通過:
各機制 fail-open / fail-close 行為:
| 機制 | 違規時 | 為何這樣 |
|---|---|---|
| IAM / ACL | block | 沒權限就不能跑 |
| Masking | 遮蔽欄位(不 block) | 讓「能看部分資料」的角色仍可工作 |
| Advisor | 記錄但不 block(observable-only) | A2 PR-1 起跑兩週 soak,PR-2 才考慮 block |
| Audit log | 永遠寫 | 即使後續所有檢查 fail 也要留軌跡 |
Advisor on Query — 互動 path 違規偵測(A2 PR-1)
歷史上 Argus 的 280+ 條 advisor 規則只跑在 Plan / Release / Issue 批次審批流程。自 A2 PR-1 起,互動 path(Query / AdminExecute / Export)也跑同一套規則,但走 observable-only 模式:
| 表面 | 顯示位置 | 受益對象 |
|---|---|---|
| Result panel banner | 跑 query 後立刻彈出,折疊式,展開看每條規則 | 跑 query 的人本人 |
| HistoryPane badge | 每筆歷史記錄旁邊一個數字 chip | 跑 query 的人 + workspace admin |
audit_log row | method='/argus.v1.SQLService/AdvisorViolation' | Auditor、workspace admin |
query_history.payload.rule_violations[] | 可 CEL filter rule_violation_count > 0 | 同上 |
| Prometheus counter | argus_sql_advisor_violation_total{rule_type,severity,query_path} | Ops、SRE |
詳見 Advisor 違規查詢 SOP(auditor 角度)與 Plan Check(批次流程角度的同一套規則庫)。
ACL — 三層 binding 串接
SQL Editor 的查詢權限由三層 IAM 串接決定:
三層為 AND 關係:任一層不通過,請求被拒。
| 場景 | 需要的 IAM |
|---|---|
| 只跑 SELECT | projectQuerier 或 projectOwner(含 SQL Editor) |
| 跑 AdminExecute | projectOwner + database admin data source 有 mapping |
| Export | projectQuerier + 該 environment 的 disable_export policy 沒擋 |
Workspace IAM 的詳情:指派角色與權限。
Masking — 欄位級遮蔽
Sensitive Data policy 在 driver 拿到 row 之後、回傳給 client 之前套用:
- 規則 hierarchy:workspace → project → database → table → column
- 行為:value 被替換為 mask 樣式(
***、xxx@***、保留前 N 後 M 等) - 預設:保守(policy 越上層越嚴,可由下層放寬)
Query Restriction Policy
Workspace / project 可設定查詢限額:
| 設定 | 行為 |
|---|---|
maximum_result_size | 查詢回傳超過 size cap → truncate + UI 顯示「超出限制」banner |
maximum_result_rows | 同上但以 row 數計 |
max_query_timeout_seconds | 超時 → 中斷 + slog 記錄 |
disable_export | 阻擋 Export RPC |
disable_copy_data | 阻擋前端結果 copy(UI 端) |
細節:Settings 參考。
跟 Plan 流程的關係
SQL Editor 不是 Plan 的替代品 — 兩者目的不同:
| SQL Editor | Plan | |
|---|---|---|
| 場景 | 探索、查資料、緊急救火 | 正式變更 |
| 流程 | 即時執行 | Plan → Issue → Approval → Rollout → Task → TaskRun |
| 審批 | 沒有(IAM 即決) | 必經審批 |
| Advisor | 跑但不 block | 跑且依嚴重度 block |
| 回滾 | 自負 | 平台支援 Revision rollback |
| Audit | 每次都記 | 每階段都記 |
規則:能走 Plan 就走 Plan。SQL Editor 是「Plan 流程不適用」的場景的補強,不是繞道。
在 UI 上
- 左下 sidebar →
SQL Editor - 左欄 schema tree:點 database → 展開 schema → table → 欄位
- 中間 editor:Monaco(含 SQL 補全 + lint)
- 右欄:歷史記錄(含 violation badge)、worksheet 收藏、masking 規則提示
跟 Schema Drift Detection 的關係
AdminExecute 跑 DDL 後,Schema Drift Detection runner 會在 10 分鐘內偵測到 DB 真實 schema 跟 Plan-blessed baseline 不一致,自動寫一筆 drift event。
| 狀況 | 結果 |
|---|---|
| DBA 跑了 DDL 並在 24h 內補 retroactive Plan | Plan 通過 → TaskRun 自動祝福新 baseline → drift event 不再出現 |
| DBA 跑了 DDL 沒補單 | drift event 一直留著被 auditor 看到 → 月底 compliance report 列 finding |
| Auditor 對 drift event 按「Trigger Re-check」確認狀態 | 寫一筆 TriggerDriftCheck audit_log(actor=auditor) |
這是 Argus 把「事前合規」(advisor on Plan)跟「事後可審計」(drift detection)兩條防線收口的關鍵點。
限制 / 已知設計
- AdminExecute 在 mobile 版限制 streaming(network drop 容易斷)— 用 desktop 或 Plan 路徑
- Query 超 timeout 會中斷但已執行的 side effect 不會 rollback(這是 driver 行為)
- Plan check / advisor 規則庫的調整影響的是新查詢,已執行的不會重判
相關
- 任務手冊:用 SQL Editor 跑互動查詢
- 概念:Plan Check(批次流程同一套規則)
- 概念:Audit Log
- 部署:IAM 模型
- 部署:Release Monitoring(Prometheus counter 細節)