Sql server 使用全域性觸發器限制IP 實現白名單功能
阿新 • • 發佈:2019-02-06
首先新建一個表:WhiteList
欄位 :IP
然後手動插入一條記錄: insert into 資料庫名.dbo.WhiteList(IP) values('<local machine>') --切記一定要加,否則等下觸發器建立後就無法進來了(解決方案在下面)
然後建立觸發器:
--建立登入觸發器 -- ============================================= -- Description: <限制本機和指定的IP登陸> -- ============================================= CREATE TRIGGER [tr_logon_CheckIP] ON ALL SERVER FOR LOGON AS BEGIN IF IS_SRVROLEMEMBER('sysadmin') = 1 BEGIN DECLARE @IP NVARCHAR(15); SET @IP = (SELECT EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]', 'NVARCHAR(15)')); IF NOT EXISTS(SELECT IP FROM [資料庫名].[dbo].[WhiteList] WHERE IP = @IP ) ROLLBACK; END; END;
成功,重新登入可以進入
可以插入新的IP,然後用其他終端來測試(伺服器本機不好測試,因為無論怎麼改IP,都是<local machine>)
------------------------------------------
假如確實犯傻了,自信過度了,比如我這樣,想把這個表內的ip都加密,結果發現不一致導致登入失敗了,怎麼都進不來,怎麼辦?按照以下步驟來:
1.開啟Sql Server Manage Studio,不要登入(反正是會失敗),去選單:“檔案”--“新建”--“使用當前連線的查詢”,在開啟的登入視窗中,伺服器名稱輸入:ADMIN:127.0.0.1
,賬號sa + 原密碼,,點選登入,成功
2.在開啟的查詢介面執行:drop trigger tr_logon_CheckIP on all server 執行成功,就刪除掉這個觸發器了
3.重新登入sa,發現可以進去了