Skip to content

處理一筆 Schema Drift Event

何時用這份文件 你是 auditor / securityOfficer / workspaceDBA,sidebar 「Schema 漂移事件」上有 OPEN 的 event 待處理。 不確定 drift detection 是什麼?先讀 Schema Drift Detection 概念

前置條件

  • 帳號有 bb.driftEvents.list + bb.driftEvents.get(readOnlyAuditor / workspaceDBA 都有;workspaceAdmin / securityOfficer 還有 .resolve + .trigger
  • 已登入 Argus

進入列表

左下 Workspace Settings → Audit & Compliance → Schema 漂移事件

或直接 URL:/drift-events

列表預設只顯示 OPEN — 上面有三個統計徽章:

  • 待處理 N — 還沒人處理的
  • ERROR N — 高嚴重度(PR-2 後才會出現)
  • WARNING N — 中嚴重度(Phase 1A 預設全 WARNING)

切換右上 status filter 可看歷史 RESOLVED / IGNORED。

點進一筆 event

每筆 event 包含:

區塊內容
頂部徽章severity / status / detected_at
Fingerprint 比對預期(baseline)vs. 實際(live)的 SHA-256 縮寫
差異摘要新增表 / 移除表 / 異動表 三張卡片 + 樣本表名(最多 5 個)
處理紀錄(若已 resolved)actor + 時間 + 處理方式 + 備註
兩個按鈕立即重新檢查(Trigger)+ 標記處理(Resolve)

第一步:先按「立即重新檢查」

立即重新檢查 同步跑一次 drift check:

  • 結果 無漂移:DB 真實狀態跟 baseline 對上了 → 通常是 schemasync runner 已抓到新 schema 且 TaskRun blessing 已祝福;通常代表這條 event 已過期,可直接標 RESOLVED
  • 結果 依然有漂移:DB 真實狀態跟 baseline 還是不一致 → 進入下一步判斷

第二步:判斷怎麼處理

情境推薦 via
DBA 緊急直跑了 DDL 沒補單,現在補正式 Plan 後就會正常retroactive_plan
變更已經是事實 + 不會再改 + 是 dev / staging 環境manual_ack
你確定這是個 false positive(例如:autovacuum 改 stats 不該觸發 — Phase 1A 仍可能誤報)ignored
真的有惡意變更需要 forensics先別 resolve — 開 incident,把 event resource name 記下、抓 audit_log,找變更時間附近的 connection 來源

第三步:按「標記處理」打開 Resolve dialog

欄位怎麼填
標記為RESOLVED — 已解決(推薦)或 IGNORED — 可忽略(false positive 才用)
處理方式上一步選的 via
備註(選填)寫一句話讓未來看 audit log 的人知道情境,例:「事件 #1234 retroactive Plan #5678 已通過」

確認 → 寫入 schema_drift_event + audit_log。

選了 retroactive_plan

Dialog 內會出現一條藍色提示:

選擇「補一份 retroactive Plan」之後,到此資料庫所屬的 project 開一份 Plan 走正式審批;Plan 跑過後下次 runner tick 會重新祝福 baseline,殘餘漂移自動清除。

開啟 Projects 清單 →

按連結會帶你去 Projects 列表,從那邊進 project → 新增 Plan。這條 drift event 你已標 RESOLVED,跟你後續開不開 Plan 是兩件事(不會自動連動 — 開 Plan 是你跟 DBA 的下一步工作)。

第四步:確認 audit log 寫了

Workspace Settings → Audit & Compliance → Audit log 找:

method = /argus.internal.v1.SchemaDriftService/ResolveDriftEvent
actor  = users/<你的 login_id>
time   = 剛才

這條 row 就是你動作的證據;月底 compliance report 會自動把這類 row 統計。

跟 DBA 流程的銜接

如果 via 選 retroactive_plan

反模式 — 看到立刻喊停

行為為什麼不該
不重新檢查就直接 Resolve可能 event 已過期;先 trigger 確認
全部用 manual_ack 結案月底 compliance report 會把 manual_ack 比例列為健康度指標,高了會被檢視
看到 ERROR 嚴重度就 ignoredERROR 是高敏 schema 異動,需要 forensics,不該繞過
直接到 PG 改 schema_drift_event 表繞過 audit_log,反而留下「未授權變更稽核紀錄」的 metadata;用 UI

常見錯誤

訊息 / 現象含意處理
「找不到此漂移事件」event resource name 過期或拼錯回列表重新點
點 Resolve 出現「resolver identity unavailable」403session 過期重新登入
點 Trigger 出現「db_schema not synced yet」412schemasync runner 還沒跑過此 DB等下次 sync (10 分鐘) 或手動 Sync database
Resolve 成功但 event 還在 OPEN抓到的是另一筆同 db 的新 event列表預設按時間倒序,找對的那筆

相關

Argus — 公司內部資料庫變更審計平台