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

限制 SQL Server 僅允許指定機器連線的三種實作方案

     編輯:關於SqlServer

核心限制

SQL Server 內建無直接功能 限制連線來源 IP/機器,亦無「連線觸發預存程序」機制 (Logon Trigger 為 2005 SP2+ 引入)。需從網路層、中介層、資料庫層輔助實現。

方案一:防火牆層級控制 (最推薦、最安全)

  • 將 SQL Server 置於防火牆後方
  • 配置規則:僅允許授權應用伺服器 IP 存取 TCP 1433 (或自訂埠)
  • 優點:獨立於資料庫、效能無損耗、支援深度封包檢查、集中管理
  • 實作:硬體防火牆、Windows 防火牆進階安全性、雲端安全群組

方案二:自訂 ODS 閘道器 (開發成本高、維護複雜)

  • 開發中介服務 (ODS Gateway) 接收用戶端連線,驗證來源後轉發至 SQL Server
  • 用戶端連線字串指向閘道器而非 SQL Server
  • 缺點:無法阻止繞過閘道器直連 SQL Server (除非配合防火牆)
  • 參考:SQL Programmers Toolkit 含 ODS 範例碼 (微軟網站免費下載)

方案三:排程預存程序檢查 sysprocesses (事後清理、有風險)

  • 建立 SQL Agent 作業,定期 (如每分鐘) 執行預存程序
  • 查詢 master..sysprocesses 的 net_address (MAC 位址) 或 host_name/program_name
  • 對不符合白名單的 SPID 執行 KILL
CREATE PROCEDURE dbo.usp_KillUnauthorizedConnections
AS
BEGIN
    DECLARE @spid SMALLINT, @sql NVARCHAR(100);
    DECLARE cur CURSOR FOR
        SELECT spid FROM master..sysprocesses
        WHERE host_name NOT IN ('APP_SERVER_1', 'APP_SERVER_2') -- 白名單
          AND spid <> @@SPID; -- 排除自身
    OPEN cur;
    FETCH NEXT FROM cur INTO @spid;
    WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @sql = 'KILL ' + CAST(@spid AS VARCHAR(5));
        EXEC sp_executesql @sql;
        FETCH NEXT FROM cur INTO @spid;
    END
    CLOSE cur; DEALLOCATE cur;
END;

嚴重缺陷:

  1. 僅能識別 MAC 位址 (易偽造)、主機名/程式名 (用戶端可修改)
  2. 攻擊者已建立連線並可能執行操作 才被發現並中斷
  3. 頻繁 KILL 可能導致交易不一致、連線池錯誤

現代最佳實踐 (SQL Server 2005+)

Logon Trigger (登入觸發器)

CREATE TRIGGER trg_RestrictLogon
ON ALL SERVER
FOR LOGON
AS
BEGIN
    IF ORIGINAL_LOGIN() NOT IN ('sa', 'svc_account') -- 排除系統帳戶
       AND HOST_NAME() NOT IN ('APP_SERVER_1', 'APP_SERVER_2')
    BEGIN
        ROLLBACK; -- 直接終止登入嘗試
    END
END;

優點: 登入階段即攔截、無連線建立開銷、支援 IP 判斷 (透過 EVENTDATA() 取得 ClientHost)。

端點權限控制

-- 僅授予特定登入存取 TSQL 預設端點
DENY CONNECT ON ENDPOINT::[TSQL Default TCP] TO [Public];
GRANT CONNECT ON ENDPOINT::[TSQL Default TCP] TO [Allowed_Login];

綜合建議

層級方案推薦等級備註
網路防火牆/安全群組白名單★★★★★必要基礎防護
資料庫 (2005+)Logon Trigger + 端點權限★★★★☆深度防禦第二層
應用連線字串加密、憑證驗證★★★★☆防止認證盜用
資料庫 (2000)排程 KILL (不推薦)★☆☆☆☆唯有無他選擇時備用

「防火牆 + Logon Trigger」雙層防禦為企業級部署標準配置,SQL Server 2000 環境務必優先實施網路層隔離。

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