首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

如何限制 SQL Server 僅允許指定機器連線

     編輯:Oracle 資料庫基礎

問題背景

SQL Server 本身不提供內建「依來源 IP/機器限制連線」的功能,也無法在連線觸發時執行預存程式進行攔截。需從網路層、應用層或稽核層面實作。

三種可行方案

方案一:防火牆層級封鎖 (最推薦,最安全)

  • 在 SQL Server 前端部署網路防火牆 (硬體或軟體),設定規則僅允許授權 IP 存取 TCP 1433 (或自訂埠)。
  • 優點:透明於資料庫、效能零損耗、集中管理、支援深度封包檢測。
  • Windows 防火牆進階安全性也可建立「輸入規則」限制遠端 IP。

方案二:自訂 ODS Gateway (中介層攔截)

  • 開發一個 ODS (Open Data Services) 應用程式作為 Gateway,客戶端連線至 Gateway,Gateway 驗證來源 IP 後再代理連線至 SQL Server。
  • 缺點:開發維護成本高;無法阻止繞過 Gateway 直連 SQL Server (需配合防火牆限制 SQL Server 僅接受 Gateway IP)。
  • 參考:SQL Programmer's Toolkit 含 ODS 範例碼 (Microsoft 下載中心免費取得)。

方案三:排程稽核 + 強制中斷 (事後補救,非預防)

  • 建立 SQL Agent Job,每分鐘執行預存程式掃描 `sys.sysprocesses` (或 `sys.dm_exec_connections`),檢查 `client_net_address`。
  • 發現非授權 IP 的連線,執行 `KILL ` 強制中斷。
  • 缺點:僅支援 MAC 地址識別 (早期版本) 或 IP;連線已建立並可能已執行操作才被發現;屬事後清理非預防。

進階補充:SQL Server 2005+ 內建功能

  • 登入觸發器:`CREATE LOGON TRIGGER` 可在登入時檢查 `EVENT_DATA()` 中的 `ClientHost`,不符合則 `ROLLBACK` 終止登入。此為原生最佳方案。
  • 連線加密與憑證:強制 TLS 加密並驗證客戶端憑證,僅受信任機器持有有效憑證。
  • 端點權限:`GRANT CONNECT ON ENDPOINT::TSQL Default TCP TO [login]` 配合防火牆。

最佳實踐建議

  1. 網路層:防火牆僅開放應用伺服器 IP 存取 SQL Server 埠 (纏深度防禦)。
  2. 資料庫層:啟用登入觸發器雙重驗證來源主機名/IP。
  3. 審計層:開啟 SQL Server Audit 或 Extended Events 記錄所有登入成功/失敗事件。
  4. 最小權限:應用程式使用專用低權限帳號,禁用 `sa` 遠端登入。

綜上,「防火牆 + 登入觸發器」組合提供最完整、效能最好、維護成本最低的解決方案,適用於所有支援觸發器的 SQL Server 版本 (2005 以降)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved