Я использую очень похожие триггеры на своих серверах и не испытываю проблем с производительностью. Производственная БД получает около 10 логинов в секунду. Это создает огромное количество данных с течением времени, что приводит к увеличению объема резервных копий и т. Д.
Для некоторых серверов я создал таблицу с пользователями, которые не должны регистрироваться при входе в систему, что также позволяет отказаться от входа в систему в соответствии с рабочим временем
Разница с моим триггером в том, что я создал базу данных для целей аудита, в которой я создал несколько хранимых процедур, которые я вызываю в триггере. Спусковой крючок выглядит так
alter TRIGGER [tr_AU_LogonLog] ON ALL SERVER
WITH EXECUTE AS 'AUDITUSER'
FOR LOGON
AS
BEGIN
DECLARE
@data XML
, @rc INT
SET @data = EVENTDATA()
EXEC @rc = AuditDB.dbo.LogonLog @data
END ;
Производственная БД получает около 10 входов в секунду. Это создает огромное количество данных с течением времени, что приводит к увеличению объема резервных копий и т. Д.
РЕДАКТИРОВАТЬ: о, я забыл, его рекомендуется, если вы создаете определенного пользователя для триггера, в некоторых случаях выполнение от имени самого себя может быть опасным.
EDIT2: здесь есть некоторая полезная информация об операторе execute as здесь . и будьте осторожны при реализации триггеров, вы можете случайно заблокировать себя, я рекомендую держать соединение открытым на всякий случай:)