由于登录触发器无法登录sql server

时间:2011-08-13 06:05:06

标签: sql triggers authentication

我有紧急情况

我写了一个登录触发器,用于禁用从黑客程序登录,但它阻止了我,没有任何用户无法登录数据库,我的触发器是

  /****** Object:  DdlTrigger [connection_limit_trigger]    Script Date: 08/13/2011 08:43:04 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


ALTER TRIGGER [connection_limit_trigger]
ON ALL SERVER 
FOR LOGON
AS
BEGIN

   IF EXISTS (SELECT    row_count,* FROM sys.dm_exec_sessions  
   WHERE  1 = 1
        AND (program_name NOT IN ('myappname', 'Microsoft Office 2003','Microsoft Office 2007','Report Server','Microsoft SQL Server' ))        
        AND (program_name NOT LIKE '%Microsoft SQL Server Management Studio%') 
        OR host_name is not null


    )
    BEGIN
       ROLLBACK;
    END;
END;


--DROP TRIGGER connection_limit_trigger ON ALL SERVER

GO

SET ANSI_NULLS OFF
GO

SET QUOTED_IDENTIFIER OFF
GO

ENABLE TRIGGER [connection_limit_trigger] ON ALL SERVER
GO

现在我无法登录数据库可以删除sql上的所有触发器吗?有没有办法解决这个问题。

2 个答案:

答案 0 :(得分:7)

如果我正确理解您的问题,由于您创建的LOGON触发器中的错误,您无法登录。

您可以在专用管理员连接(DAC)下删除(DROP)触发器。

sqlcmd -A -D master (as a sysadmin)

答案 1 :(得分:0)

对于未来,我建议你添加这样的东西。至少在你测试的时候。

    IF IS_SRVROLEMEMBER('sysadmin', ORIGINAL_LOGIN()) = 1
        OR ORIGINAL_LOGIN() = 'NT AUTHORITY\NETWORK SERVICE'
        BEGIN
            GOTO ERROREND
        END

错误: - 接近触发器的结尾