01|靈活查詢與可驗證的安全
你要完成什麼
Section titled “你要完成什麼”回答「幫我找逾期且還沒出完的訂單」,並能證明結果正確、沒有讀到不該讀的資料、沒有把資料庫密碼交給模型。
三種查詢能力
Section titled “三種查詢能力”| 形式 | 模型可決定什麼 | 本版狀態 |
|---|---|---|
| 固定查詢 | 只選是否呼叫 | OpenBao 網頁示範 |
| 受控參數化查詢 | 日期、客戶、狀態、排序、分頁 | MCP 已實作 |
| 動態 SQL | 在允許的語法與資料集合內產生不同 JOIN/聚合 | 進階目標,未開放 |
自然語言入口可以有語意理解,但不代表後端必須接受任意 SQL。課程先把身分、資料權限與秘密生命週期做成可驗證的邊界,再逐步增加查詢表達力。
誰負責守住什麼
Section titled “誰負責守住什麼”| 元件 | 責任 | 訂單案例 |
|---|---|---|
| Keycloak | 確認使用者身分、簽發 Token | 確認是業務 A |
| MCP/FastAPI | 驗證 Token、角色與輸入;強制執行 | 不接受偽造 user、SQL 字串或超額筆數 |
| 業務查詢服務 | 把問題映射為審核過的語意與 SQL | 出貨先彙總,避免重複加總 |
| OpenBao | 後端身分驗證、短效憑證與撤銷 | 120 秒唯讀帳號 |
| PostgreSQL | Grants、RLS、逾時、資料運算 | 只見台灣訂單,薪資不可讀 |
| Grafana/驗證紀錄 | 對照資料摘要與實驗證據 | 檢查結果、拒絕、撤銷 |
Tailscale 管網路可達性,不能代替資料授權;OpenBao 管秘密,不能判斷 SQL 的業務正確性;RLS 管資料列,欄位權限仍需獨立設計。
不以「AI 答得出來」作為驗收
Section titled “不以「AI 答得出來」作為驗收”請同時檢查四件事:
- 正確性:部分出貨計入;取消排除;日期與單位一致。
- 授權:業務不能查薪資或其他市場,不靠提示詞勸阻。
- 生命週期:成功、錯誤與到期都能處理憑證。
- 效率:筆數、逾時與併發有界線;不是先拉整庫再讓模型篩。
第一個思考題
Section titled “第一個思考題”用同一段查詢分別以管理員與業務角色執行,結果數量不同是否代表模型出錯?先查資料範圍,再討論模型品質。權限本身就是答案的一部分。
任何架構都不能保證永不被破解。本課驗收的是具體可測的限制;仍須處理套件漏洞、操作失誤、帳號被盜、累計匯出與復原。