SqlServer服務中利用觸發器對指定賬戶進行登入ip限制提升安全性

張曉棟發表於2023-02-03

轉眼間上次寫文章已經是 2022年12月15日的事情啦,本來從2022年7月份開始寫作之後保持著每週一篇,然而從12月15日後斷更了這麼久,經歷了,隔離、陽、過年、從今天開始繼續堅持寫作,本片文章給大家分享 SqlServer服務中利用觸發器對指定賬戶進行登入ip限制從而提升賬戶的安全性,這樣可以靈活的限制每個賬戶的允許登入IP,類似於 PostgreSQL 中 pg_hba.conf 配置檔案的功能,MySQL 則是在建立賬戶時可以配置賬戶允許登入IP,下面記錄一下 SQLServer 如何實現。


新的一年祝大家工作順利,身體健康。


在MySql資料庫中我們在建立一個新的使用者時是可以選擇這個使用者的可用連線ip的,比如localhost 或者 某個ip 甚至不做限制直接輸入 % 則表示這個使用者執行任意IP遠端連線,但是在微軟的MsSqlServer中在建立使用者時則沒有這樣的設定,但是有時候我們處於安全問題,想要限制某個賬戶只能透過某個IP訪問,透過防火牆設定的話會直接阻斷這個IP對所有賬戶的訪問,有點一棍子打死,不是我們想要的,這種情況下可以利用MsSqlServer資料庫中的觸發器來實現這個目的,當使用者請求連線資料庫時會觸發我們提前寫好的規則進行驗證是否允許連線。

登陸資料庫伺服器之後,新建查詢輸入如下程式碼:

請替換程式碼中的xiaoming為你想要限制的資料庫賬戶名稱

CREATE TRIGGER [tr_con_limit_xiaoming]
ON ALL SERVER WITH EXECUTE AS 'sa'
FOR LOGON
AS
BEGIN

--限制xiaoming這個帳號的連線
IF ORIGINAL_LOGIN()= 'xiaoming'
--允許xiaoming在本機和下面的IP登入
AND
(SELECT EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]', 'NVARCHAR(15)'))
NOT IN('','192.168.1.2','192.168.1.3')
     ROLLBACK;
END;

執行之後就會建立一個叫做 tr_con_limit_xiaoming 的觸發器,如下圖

這樣 xiaoming 這個賬戶就只允許透過 本地 和 192.168.1.2 和 192.168.1.3 這兩個IP連線了。

至此關於 SqlServer服務中利用觸發器對指定賬戶進行登入ip限制提升安全性 就講解完了,有任何不明白的,可以在文章下面評論或者私信我,歡迎大家積極的討論交流,有興趣的朋友可以關注我目前在維護的一個 .NET 基礎框架專案,專案地址如下
https://github.com/berkerdong/NetEngine.git
https://gitee.com/berkerdong/NetEngine.git

相關文章