洞察 · AI · 2026 · 09 · 04

讓 AI 查詢企業資料庫:安全 Text-to-SQL 架構怎麼設計

讓使用者用自然語言查詢營運資料很有價值,但不能把大型語言模型直接接上正式資料庫。可靠的架構必須假設模型會誤解問題、產生危險查詢,甚至受到提示注入攻擊。

讓 AI 查詢企業資料庫:安全 Text-to-SQL 架構怎麼設計

先定義信任邊界,而不是先調整提示詞

Text-to-SQL 的核心風險不只在 SQL 是否能執行,而是它是否讀取了不該讀取的資料、跨越租戶邊界,或用昂貴查詢拖慢正式系統。大型語言模型應被視為不受信任的查詢提案者,而不是擁有資料庫權限的代理人。模型可以解讀問題並提出查詢意圖,但授權、驗證與執行必須由確定性的系統負責。

設計前要先釐清使用者角色、資料敏感度、允許的查詢類型與可接受的延遲。財務主管、客服人員與外部合作夥伴即使提出相同問題,也不應自動得到相同資料。若需求只涉及彙總報表,就不必開放明細欄位;若需要近即時資訊,也要判斷查詢副本、資料倉儲或快取是否比正式交易資料庫更合適。

  • 預設唯讀:禁止 INSERT、UPDATE、DELETE、DDL、預存程序與多重陳述式。
  • 最小資料範圍:只公開經核准的資料集、欄位與時間區間。
  • 身分沿用:資料權限來自企業身分與角色,不由模型自行判斷。
  • 租戶隔離:租戶條件由執行層強制加入,不能依賴提示詞。
  • 失敗即拒絕:無法確認語意、權限或成本時,要求澄清而不是猜測。

以語意層縮小模型可見的資料世界

直接把完整資料庫綱要塞進提示詞,通常既不準確也不安全。內部表名、歷史欄位與複雜關聯會增加模型選錯資料的機率,也可能暴露不必要的系統資訊。較穩健的方式是建立受控語意層,例如唯讀檢視、資料集目錄、業務指標定義與核准的關聯路徑。模型看到的是「有效訂單金額」或「可服務客戶」等業務概念,而不是任意拼接底層表格。

綱要檢索可借用 RAG 的做法:先依問題、使用者角色與資料領域,找出少量相關表格、欄位說明、同義詞及範例,再交給模型規劃查詢。這比一次提供全部結構更容易維護,也能避免相似欄位名稱造成混淆。不過,欄位註解、範例值與資料目錄同樣可能含有惡意或錯誤文字,因此只能作為資料,不可當成系統指令。

  • 穩定業務檢視:用版本化檢視隔離底層綱要變更,避免模型追逐實體表。
  • 明確指標定義:記錄時區、幣別、取消狀態、去重方式與計算期間。
  • 核准關聯:限制可使用的 JOIN 路徑,防止笛卡兒積與錯誤歸因。
  • 欄位分級:標示個資、機密資料、遮罩規則與允許的角色。

所有 SQL 都必須通過確定性的安全閘門

模型產生的 SQL 不應直接送往資料庫。安全閘門應使用對應資料庫方言的解析器建立抽象語法樹,再檢查陳述式類型、資料來源、欄位、函式、子查詢、聯集與註解。只用正規表示式封鎖危險關鍵字並不可靠,因為別名、巢狀查詢、註解與不同方言都可能繞過字串規則。

授權條件也不應要求模型自行補上。執行服務應根據已驗證的使用者身分,套用資料庫原生的列級安全政策,或在解析後的語法樹中加入不可移除的租戶、部門與資料期間條件。對敏感欄位,可在語意層排除、在查詢結果遮罩,或只允許彙總輸出。若只在回傳畫面隱藏欄位,原始資料仍可能進入模型內容、日誌或追蹤系統。

通過語法與權限檢查後,仍要控制資源成本。系統可先執行 EXPLAIN 或資料庫提供的估算機制,拒絕全表掃描、過多 JOIN 或超出成本門檻的計畫。然而估算並不總是準確,所以還需要執行逾時、掃描量限制、最大回傳列數與並行查詢上限作為第二層防護。

  • 僅允許單一 SELECT 或預先核准的查詢模板。
  • 使用參數綁定處理日期、租戶、狀態與使用者輸入值。
  • 自動補上合理的 LIMIT,但不把 LIMIT 當成掃描成本控制。
  • 拒絕未限定範圍的敏感明細查詢與未知函式。
  • 驗證後重新序列化 SQL,避免執行模型提供的原始字串。

隔離執行、保留證據,並讓系統能夠拒答

通過驗證的查詢應由獨立執行代理送往唯讀副本、資料倉儲或專用分析端點。代理使用權限極小且可輪替的憑證,設定連線、記憶體與查詢逾時,並限制回傳資料量。這種分層讓模型服務即使遭入侵,也不會直接持有正式資料庫的廣泛帳密。對高敏感領域,可先回傳聚合結果,再讓模型撰寫自然語言摘要,而不是把所有明細交給模型。

可觀測性不能只記錄最後的答案。稽核資料應涵蓋使用者身分、原始問題、選用的語意資料集、產生與重寫後的 SQL、政策判定、執行時間、查詢狀態及結果筆數,同時避免把敏感結果原文寫入一般應用程式日誌。使用者介面也應顯示系統如何理解問題、資料更新時間、套用的篩選條件與使用的資料來源,讓使用者能在商務決策前發現誤解。

上線前的評估應包含正常問題、模糊問題、越權要求、提示注入、方言差異、巨大掃描與錯誤關聯等測試。除了答案是否正確,也要檢查是否選對資料集、是否遵守政策、是否在不確定時拒答,以及相同角色是否得到一致結果。實務上可先從少數高價值、定義清楚的唯讀情境開始,再依稽核證據擴大範圍;安全的 Text-to-SQL 是受治理的查詢產品,而不是一段寫得很長的提示詞。

開始

有類似的需求?

告訴我們你的產業、目前系統狀態與預算範圍。我們會在 2 個工作天內回覆,並安排 30 分鐘免費諮詢。