hs-sql-agent 不會把 AI 產生的 SQL 直接當成可信任指令執行。真正執行前,SQL 會先經過解析、驗證、功能支援檢查、存取政策檢查,以及針對目標資料庫的編譯。
查詢執行流程
查詢大致會依照以下順序處理:
- 驗證 MCP 金鑰,並套用該金鑰限定的資料庫、資料表、工具與執行權限範圍。
- 把支援的 SQL 解析成結構化定義 / AST。
- 驗證語句與輸入 SQL 的語意是否位於支援範圍內。
- 檢查目標資料庫能否安全表達維持這些語意所需的功能。
- 為設定的資料庫編譯並產生對應 SQL。
- 在設定的執行限制內執行 SQL。
SQL 編譯器明確區分「驗證輸入 SQL 語意」與「確認目標資料庫支援能力」兩個階段。不支援的語法,或無法確認能安全維持相同語意的功能,會直接拒絕,不會偷偷替換成表面相似的結構。
為什麼採用「失敗即拒絕」(fail-closed)?
跨資料庫 SQL 有很多「看起來相同、實際含義不同」的情況,例如 NULL 行為、型別規則、運算子語意、分頁、識別項、函式與 DML 行為。
對 AI 開放的 SQL 執行入口若採用「盡力改寫」,可能讓語法仍然正確,卻在背景改變原意。因此 hs-sql-agent 寧可明確拒絕,也不會默默降低語意保證。
依資料庫產生 SQL
MCP 的公開介面是統一的,但最後產生的 SQL 會依資料庫而異。目前支援的資料庫包括:
- PostgreSQL
- MySQL
- SQL Server
- Oracle
- SQLite
- Firebird
支援範圍是刻意限定的。某個資料庫出現在支援清單中,不代表該產品提供的所有 SQL 語法都可以使用。只有當某項功能的語意能被內部表示並驗證時,編譯器才會把它納入支援範圍。