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

来源:互联网 发布:国产数据库怎么样 编辑:程序博客网 时间:2024/05/22 17:09

首先新建一个表:WhiteList

字段 :IP

然后手动插入一条记录: insert into 数据库名.dbo.WhiteList(IP) values('<local machine>')   --切记一定要加,否则等下触发器建立后就无法进来了(解决方案在下面)


然后创建触发器:

--创建登录触发器-- =============================================-- Description:    <限制本机和指定的IP登陆>-- =============================================CREATE TRIGGER [tr_logon_CheckIP]ON ALL SERVERFOR LOGONASBEGIN    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,发现可以进去了


阅读全文
0 0
原创粉丝点击