Аудит триггеров DISABLE / ENABLE в SQL - PullRequest
6 голосов
/ 24 октября 2011

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

ALTER TABLE <tableName> ENABLE TRIGGER <triggerName>

ИЛИ

ALTER TABLE <tableName> DISABLE TRIGGER <triggerName>

.Из того, что я определил, метод DDL становится бесполезным, если пользователь выполняет следующие операторы, которые пропускают команду ALTER:

DISABLE TRIGGER <triggerName> ON <tableName>
ENABLE TRIGGER <triggerName> ON <tableName>

У меня было несколько мыслей о захвате этих событий, но ни один из них не работает.Одним из них было то, что если бы я мог получить доступ к таблице, лежащей в основе представления sys.triggers, я мог бы поместить триггер вставки / обновления в эту таблицу и применить фильтр к имени триггера для получения аудита;но я подозреваю, что это может привести к бесконечной рекурсии, даже если бы это было возможно сделать.

Есть ли у кого-нибудь здесь какие-либо возможные предложения для альтернативных решений этой проблемы?Я не понимаю, почему MS позволяет расширенным версиям утверждений выходить за рамки аудита.То есть одитинг из самых простых методов;использование профилировщика SQL для этого не требуется.

1 Ответ

5 голосов
/ 24 октября 2011

Я бы сначала решил это через разрешения.Никто, кроме нескольких dbas, не должен иметь права изменять таблицу на prod и, следовательно, не может использовать триггер включения или отключения.Если приложение использует его, это должно остановить его.Для любого пользователя нет оправдания необходимости изменять таблицы.Если вы хотите сделать это, у вас, вероятно, есть недостаток дизайна.Если у вас есть люди, фактически отключающие триггеры, у вас определенно есть недостаток дизайна.Любой код с отключенным триггером должен иметь огромный красный флаг во время проверки кода.Недопустимо отключать триггер в коде приложения.Это то, что должен делать только dbas, у которого есть опыт, чтобы знать, когда это делать.Если вы пишете код приложения и вам кажется, что для его работы необходимо отключить триггер, значит, ваш код неверный или триггер необходимо переписать, отключение триггеров должно происходить только в редких случаях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...