невозможно войти на сервер sql из-за триггера входа - PullRequest
0 голосов
/ 13 августа 2011

У меня срочная ситуация

Я пишу триггер входа в систему для отключения входа в систему от хакерских программ, но он заблокировал меня, и никто из пользователей не может войти в базу данных. Мой триггер

  /****** 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 ]

7 голосов
/ 13 августа 2011

Если я правильно понимаю ваш вопрос, вы не можете войти в систему из-за ошибки в триггере LOGON, которую вы создали.

Вы можете удалить (DROP) триггер по выделенному соединению администратора (DAC)).

sqlcmd -A -D master (as a sysadmin)
0 голосов
/ 05 марта 2015

В будущем я мог бы рекомендовать вам добавить что-то вроде этого.По крайней мере, во время тестирования.

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

ОШИБКА: - ближе к концу триггера

...