2011-08-13 72 views
0

我有紧急情况无法登录到SQL Server由于登录触发器

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

/****** 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?有什么办法可以解决这个问题。

回答

7

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

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

sqlcmd -A -D master (as a sysadmin) 
+0

感谢米奇我用这个命令连接的端部:SQLCMD -S本地主机-d主-A 并运行此查询:DROP TRIGGER connection_limit_trigger ON ALL SERVER 它的工作 – Rapunzo

+1

好的一个:高兴地帮助。 –

0

对于未来我可能会建议您添加这样的事情。至少在你测试的时候。

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

ERROREND: - 邻近所述触发