1. 程式人生 > >Sql server 使用全域性觸發器限制IP 實現白名單功能

Sql server 使用全域性觸發器限制IP 實現白名單功能

首先新建一個表: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,發現可以進去了