none
SQL Server 2008因为创建触发器限制连接IP,导致无法正常登录 RRS feed

  • 问题

  • 首先说明事件缘由,为了安全,我把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]无法打开用户默认数据库。登录失败

    在此恳请帮助,敬谢

    2011年7月9日 9:59

答案

全部回复

  • 用DAC登录。
    想不想时已是想,不如不想都不想。
    • 已标记为答案 FFuFeng 2011年7月9日 15:34
    2011年7月9日 12:37
    版主
  • 用DAC登录。
    想不想时已是想,不如不想都不想。


    可以用DAC登录,但是不能做操作,查不到我加的那个触发器,删除操作的时候,错误提示如下:

    消息 3701,级别 11,状态 5,无法对 触发器 'tr_LoginCheck' 执行 删除,因为它不存在,或者您没有所需的权限。

    2011年7月9日 15:17
  • 用DAC登录。
    想不想时已是想,不如不想都不想。

    问题已经解决,先前删除的操作,可能起到作用了,虽然提示有异常,但后来我尝试登录的时候,成功了,非常感谢!!
    2011年7月9日 15:35
  • If you like to restrict access, can try ipsec at os level.
    2011年7月9日 22:06
  • 如果非要这么操作,别忘记添加<local machine>否则就这样了,自己都登录不了!
    2011年7月27日 9:16