SQL Server 無類似 MySQL mysql.user.Host 的 IP 白名單機制,登入觸發器 (LOGON TRIGGER) 可在驗證通過、會話建立前攔截,實現精細存取控制。
192.168.1.* 格式 (需自行解析)。ORIGINAL_LOGIN():取得原始登入名稱 (不受 EXECUTE AS 影響)。EVENTDATA():回傳 XML,.value('(/EVENT_INSTANCE/ClientHost)[1]', 'NVARCHAR(15)') 取得客戶端 IP。ROLLBACK:終止登入,回傳錯誤 17892「登入失敗,觸發器回滾」。CREATE TRIGGER tr_connection_limit ON ALL SERVER
WITH EXECUTE AS 'sa'
FOR LOGON AS
BEGIN
IF ORIGINAL_LOGIN() = 'test'
AND EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]', 'NVARCHAR(15)')
NOT IN ('', '192.168.1.50', '192.168.1.120')
ROLLBACK;
END;
SELECT s.session_id, s.login_time, s.host_name, s.original_login_name, c.client_net_address
FROM sys.dm_exec_sessions s
JOIN sys.dm_exec_connections c ON s.session_id = c.session_id;
TRY...CATCH 並寫入錯誤日誌。DISABLE TRIGGER tr_connection_limit ON ALL SERVER;

