在執行 SQL Server 的伺服器上,建立「輸入規則」:
192.168.1.100),其餘預設封鎖。進階建議:將 SQL Server 預設埠 1433 修改為非標準埠(如 2433),降低自動掃描攻擊風險。
適用於多網卡伺服器,僅允許特定網卡(IP)接收 TDS 封包。
-- 1. 停用預設 TCP 端點
ALTER ENDPOINT [TSQL Default TCP] STATE = STOPPED;
GO
-- 2. 建立新端點,綁定特定 IP(例:192.168.1.1)與埠 1433
CREATE ENDPOINT [TSQL User TCP]
STATE = STARTED
AS TCP (
LISTENER_PORT = 1433,
LISTENER_IP = (192.168.1.1) -- 僅監聽此網卡
)
FOR TSQL();
GO
-- 3. 授予 public(或指定登入)連線權限
GRANT CONNECT ON ENDPOINT::[TSQL User TCP] TO [public];
GO
完成後,只有經由 192.168.1.1 這張網卡進入的封包才能建立連線。若同時限制登入帳號,可將 TO [public] 改為 TO [SpecificLogin]。
不需額外網卡,透過 LOGON 觸發器在驗證階段直接拒絕非白名單 IP。
USE master;
GO
CREATE TRIGGER tr_LoginCheck
ON ALL SERVER
FOR LOGON
AS
BEGIN
DECLARE @clientIP NVARCHAR(48) = EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]', 'NVARCHAR(48)');
-- 允許清單(支援 CIDR 或單一 IP,此處示範單一 IP)
IF @clientIP NOT IN ('192.168.1.1', '127.0.0.1', '::1')
BEGIN
ROLLBACK; -- 直接終止連線
END
END;
GO
注意:
sqlcmd -A -S localhost -Q "DISABLE TRIGGER tr_LoginCheck ON ALL SERVER"。| 維度 | 防火牆 | 端點限制 | 登入觸發器 |
|---|---|---|---|
| 部署複雜度 | 低 | 中(需專用網卡) | 中 |
| 效能影響 | 無(核心層過濾) | 無(網路層綁定) | 極低(驗證階段) |
| 彈性 | 高(支援 CIDR、群組) | 低(綁定實體 IP) | 高(可寫複雜邏輯) |
| 適用版本 | 所有版本 | SQL 2005+ | SQL 2005 SP2+ |
| 推薦場景 | 通用生產環境首選 | 多網卡隔離區段 | 需動態名單、無法改網路設定 |
綜合建議:優先使用 Windows 防火牆,配合修改預設埠;若有嚴格網段隔離需求,搭配端點限制;僅在無法調整網路設定時啟用登入觸發器。