Триггер входа — очень полезный механизм. Однако, обращаться с ним следует осторожно. LOGON-триггеры срабатывают ещё до того, как пользователь начнёт работу с SQL-сервером, поэтому если такой триггер написан неаккуратно или срабатывает с ошибкой, пользователи, включая администраторов, просто не смогут подключиться к серверу.
Вот пример триггера входа, который умышленно написан так, чтобы сбрасывать все попытки подключения к серверу:
LOGON-триггер, сбрасывающий все подключения
Теперь при попытке установить соединение с SQL-сервером, получаем сообщение об ошибке, случившейся во время выполнения триггера входа:
LOGON-триггер вызывает сброс соединения
Если вы попали в такую ситуацию, придётся воспользоваться специальной лазейкой, которая позволяет администратору подключиться к SQL-серверу в обход LOGON-триггеров. Такое «сервисное» подключение доступно только членам серверной роли SysAdmin. Обратите внимание, что возможность удалённого сервисного подключения может быть отключена в настройках, тогда придётся работать прямо на сервере.
В утилите SQLCmd воспользоваться сервисным подключением можно, указав параметр -A:
DAC через SQLCmd
А при подключении из студии используйте префикс ADMIN: перед именем сервера. Вот так:
DAC через SQL Server Management Studio
Такое подключение не предназначено для полноценной работы с данными, только для решения проблем с доступностью сервера. Но удалить или отключить триггер вы сможете.
Автор: Самородов Федор Анатольевич