跳到內容

01|靈活查詢與可驗證的安全

回答「幫我找逾期且還沒出完的訂單」,並能證明結果正確、沒有讀到不該讀的資料、沒有把資料庫密碼交給模型。

形式 模型可決定什麼 本版狀態
固定查詢 只選是否呼叫 OpenBao 網頁示範
受控參數化查詢 日期、客戶、狀態、排序、分頁 MCP 已實作
動態 SQL 在允許的語法與資料集合內產生不同 JOIN/聚合 進階目標,未開放

自然語言入口可以有語意理解,但不代表後端必須接受任意 SQL。課程先把身分、資料權限與秘密生命週期做成可驗證的邊界,再逐步增加查詢表達力。

元件 責任 訂單案例
Keycloak 確認使用者身分、簽發 Token 確認是業務 A
MCP/FastAPI 驗證 Token、角色與輸入;強制執行 不接受偽造 user、SQL 字串或超額筆數
業務查詢服務 把問題映射為審核過的語意與 SQL 出貨先彙總,避免重複加總
OpenBao 後端身分驗證、短效憑證與撤銷 120 秒唯讀帳號
PostgreSQL Grants、RLS、逾時、資料運算 只見台灣訂單,薪資不可讀
Grafana/驗證紀錄 對照資料摘要與實驗證據 檢查結果、拒絕、撤銷

Tailscale 管網路可達性,不能代替資料授權;OpenBao 管秘密,不能判斷 SQL 的業務正確性;RLS 管資料列,欄位權限仍需獨立設計。

請同時檢查四件事:

  1. 正確性:部分出貨計入;取消排除;日期與單位一致。
  2. 授權:業務不能查薪資或其他市場,不靠提示詞勸阻。
  3. 生命週期:成功、錯誤與到期都能處理憑證。
  4. 效率:筆數、逾時與併發有界線;不是先拉整庫再讓模型篩。

用同一段查詢分別以管理員與業務角色執行,結果數量不同是否代表模型出錯?先查資料範圍,再討論模型品質。權限本身就是答案的一部分。

任何架構都不能保證永不被破解。本課驗收的是具體可測的限制;仍須處理套件漏洞、操作失誤、帳號被盜、累計匯出與復原。