跳至主要內容
hs-sql-agent
2.0.3
文件 2.0.3
文件 管理

安全政策

從管理介面設定 hs-sql-agent 執行階段的 SQL、DML、速率限制與並行執行政策。

查詢政策 限制受治理查詢的回傳資料量與執行逾時。
DML 政策 要求 UPDATE / DELETE 條件、限制全表修改,並控制最多可影響的資料列數。
執行階段限制 設定 MCP 金鑰的預設速率限制,以及 SQL 最大並行執行數。

Security Policy 是執行階段真正會強制套用的規則,不是只提醒 Agent「最好這樣做」的提示。查詢與 DML 執行流程,以及執行階段限制器,都會讀取目前的政策設定。

hs-sql-agent 政策欄位

欄位預設值有效範圍 / 意義
QueryMaxRows10001–100,000
QueryTimeoutSeconds301–600 秒
RequireWhereForUpdatetrueUPDATE 必須有條件
RequireWhereForDeletetrueDELETE 必須有條件
AllowFullTableUpdatefalse是否明確允許全表 UPDATE
AllowFullTableDeletefalse是否明確允許全表 DELETE
DmlMaxAffectedRows1001–1,000,000
KeyPermitLimit120每個設定的金鑰時間視窗可允許 1–1,000,000 個請求
KeyWindowSeconds601–86,400 秒
MaxConcurrentSql16同時執行 1–10,000 個 SQL 操作

Service 對超出範圍的值會直接拒絕,不會悄悄修正成另一組政策設定。

管理端授權

操作權限
讀取目前政策/runtime/securityview
更新政策/runtime/securityedit

政策更新會寫入稽核事件,並立即取代執行階段中的目前政策狀態;同時透過設定的 security-policy synchronization provider 發布變更,讓分散式部署可以把新政策同步到其他執行個體。

查詢限制

QueryMaxRows 透過編譯器與執行階段政策限制查詢輸出;QueryTimeoutSeconds 則控制查詢執行的逾時規則。這些都是伺服器端強制條件,不依賴用戶端自行記得加入 LIMIT 或送出取消要求。

UPDATE / DELETE 條件

預設政策要求 UPDATE / DELETE 必須有條件,並拒絕全表修改。

允許全表修改應該是明確的安全決策:關閉 RequireWhereForUpdate,不等於已經表達「允許全表 UPDATE」的相同安全意圖。除非實際流程確實需要大範圍修改,否則建議保留較保守的預設值。

DML 影響資料列上限

DmlMaxAffectedRows 用來限制單次資料修改的影響範圍,但它只是一層保護措施,不會取代 Safe DML 協定。資料修改仍必須成功完成解析、驗證與編譯;透過 MCP 執行的 DML 還必須完成人工核准,以及提交前的重新驗證。

請見 Safe DML

MCP 金鑰速率限制

安全政策提供每把金鑰的預設請求上限與時間視窗。個別 MCP 金鑰可以:

  • 繼承政策;
  • 使用自訂覆寫值;
  • 明確設定為不限速。

金鑰層級的模式請見 MCP 金鑰

SQL 並行執行

MaxConcurrentSql 是執行階段的 SQL 並行執行上限。這個限制只作用在單一程序內,或能跨執行個體協調,取決於目前設定的 SQL concurrency provider。

如果叢集需要讓整個部署共用同一個上限,就應使用 distributed provider,而不是讓每個節點各自擁有完整配額。