驰网飞飞 发表于 2025-8-14 14:28:52

SQL Server中使用登录触发器限制用户的访问地址

目前有个需求,需要限制个别账号(或者其他权限较高的账号)的登录IP,降低访问的风险。

假设这里的需求是:限制 test账号,只能通过本机和几个固定的个IP登录MSSQL

1、使用sa账号登录

2、创建test登录账号
CREATE LOGIN test WITH PASSWORD = 'Abcd@1234'
GO
3、创建登录触发器
drop TRIGGER ON ALL SERVER ;

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


IF ORIGINAL_LOGIN()= 'test'
AND
(SELECT EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)', 'NVARCHAR(15)'))
NOT IN('<local machine>','192.168.31.181','192.168.31.17')
   ROLLBACK;
END;如果test账号在其他IP尝试登录mssql,则会出现如下报错:



在未做限制前,test登录后,可以用sa账号查看到如下登录明细:
SELECT
a.,a.,a.,
a.,b.
FROM MASTER.sys.dm_exec_sessions a
INNER JOIN MASTER.sys.dm_exec_connections b
ON a.session_id=b.session_id;


感谢您的阅读,服务器大本营-技术文章内容集合站,助您成为更专业的服务器管理员!
页: [1]
查看完整版本: SQL Server中使用登录触发器限制用户的访问地址

点击直接加入[服务器大本营QQ频道]