当前位置: 代码迷 >> Sql Server >> SQL Server 2008由于创建触发器限制连接IP,导致无法正常登录
  详细解决方案

SQL Server 2008由于创建触发器限制连接IP,导致无法正常登录

热度:67   发布时间:2016-04-24 21:12:00.0
SQL Server 2008因为创建触发器限制连接IP,导致无法正常登录
首先说明事件缘由,为了安全,我把sa用户设置为禁用,又因为我想在数据库服务器上控制,只允许固定IP地址连接访问,所以建立了一个触发器,如下:

USE master 

GO 

CREATE TRIGGER tr_LoginCheck 

ON ALL SERVER 

FOR LOGON 

AS 

IF EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]', 'varchar(15)') <> '192.168.1.1' 

ROLLBACK TRAN 

GO

允许的IP地址是另一台服务器的IP地址,执行该触发器后,当我在服务器上使用Windows身份登录的时候,提示错误“无法连接到机器名\实例名”,

其他信息:由于执行触发器,登录名“机器名\用户”的登录失败。已将数据库上下文更改为“master”。已将语言设置更改为简体中文。(Microsoft SQL Server,错误:17892)

而我在另一台服务器上登录时,因为登录帐号只能访问SQL 服务器某一个数据库,所以登录的时候也出现错误:

无法连接到服务器XXX.XXX.XXX.XXX

服务器:消息4064,级别16,状态1

[Microsoft][ODBC SQL Server Driver][SQL Server]无法打开用户默认数据库。登录失败

在此恳请帮助,敬谢


------解决方案--------------------
多放几个类似 '192.168.1.1'  这样的ip试试

------解决方案--------------------
引用:
多放几个类似 '192.168.1.1' 这样的ip试试

问题是他的触发器已经设置了,现在登录不了!
------解决方案--------------------
看是否返回了有效IP,并且格式是正确的,不是 192.168.001.002 这样子的。
------解决方案--------------------
登陆的时候用的是服务器名/实例名  >?
------解决方案--------------------
CREATE TRIGGER connection_limit_trigger
ON ALL SERVER 
FOR LOGON
AS
BEGIN
 declare @ip nvarchar(max)
 declare @loginName nvarchar(max)
 SELECT @ip=EVENTDATA().value
        ('(/EVENT_INSTANCE/ClientHost)[1]','nvarchar(max)')
    SELECT @loginName=EVENTDATA().value
        ('(/EVENT_INSTANCE/LoginName)[1]','nvarchar(max)')
insert into test.dbo.loginrecrod select @loginname,@ip
--    if @loginName='sa' and @ip<>'xxxxxx'--replaced with your ip
--      rollback
  相关解决方案