您的位置:首页 > 数据库

Sql server 使用全局触发器限制IP 实现白名单功能

2017-11-22 22:35 751 查看
首先新建一个表: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,发现可以进去了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: