Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 DDL trigger: как записать  [new]
valv
Member

Откуда:
Сообщений: 122
добрый день,
в системе имеется DDL триггер, который записывает данные из EVENTDATA() при любом изменении структуры баз данных.
сейчас потребовалось записывать и изменения самого DDL триггера (основная задача - записать когда и кто disable DDL trigger).
как можно уловить изменение DDL триггера?
текущее временное решение: N раз в секунду читаем из
select is_disabled, modify_date from sys.server_triggers
что позволяет записать только время изменения; этого недостаточно.
SQL Server 2012.
спасибо.
17 июн 14, 13:16    [16175451]     Ответить | Цитировать Сообщить модератору
 Re: DDL trigger: как записать  [new]
msLex
Member

Откуда:
Сообщений: 9303
а разве DDL триггер на ALTER_TRIGGER это не отслеживает?
17 июн 14, 13:27    [16175552]     Ответить | Цитировать Сообщить модератору
 Re: DDL trigger: как записать  [new]
msLex
Member

Откуда:
Сообщений: 9303
msLex
а разве DDL триггер на ALTER_TRIGGER это не отслеживает?

Да, DISABLE TRIGGER не является DLL операцией, trigger на DDL_DATABASE_LEVEL_EVENTS ее не отслеживает, хотя сама операция требует разрешения ALTER ANY DATABASE DDL TRIGGER.
Тогда только административно.
17 июн 14, 14:21    [16175965]     Ответить | Цитировать Сообщить модератору
 Re: DDL trigger: как записать  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8834
От сисадмина никак не защититесь.
17 июн 14, 16:24    [16177023]     Ответить | Цитировать Сообщить модератору
 Re: DDL trigger: как записать  [new]
gang
Member

Откуда:
Сообщений: 1394
valv,

Trace ?
17 июн 14, 16:57    [16177292]     Ответить | Цитировать Сообщить модератору
 Re: DDL trigger: как записать  [new]
valv
Member

Откуда:
Сообщений: 122
gang
valv,

Trace ?

увы...
trace имеет смысл использовать для работы непродолжительное время, а тут требуется создать механизм работающий годами. результат ожидается примерно такой: ставят задачу: кто отключал DDL trigger в августе 3 года назад? запускаем запрос к обычной таблице, через 5 секунд результат.
Владислав Колосов
От сисадмина никак не защититесь.

задача не для защиты от сисадмина, это требование по логгированию важных данных. доказано, что кто-то когда-то отключал DDL триггер, и логично, что терерь хотят это записывать наравне с изменениями в хранимых процедурах.
17 июн 14, 17:46    [16177686]     Ответить | Цитировать Сообщить модератору
 Re: DDL trigger: как записать  [new]
gang
Member

Откуда:
Сообщений: 1394
valv
увы...
trace имеет смысл использовать для работы непродолжительное время, а тут требуется создать механизм работающий годами. результат ожидается примерно такой: ставят задачу: кто отключал DDL trigger в августе 3 года назад? запускаем запрос к обычной таблице, через 5 секунд результат.

Дефолтный трейс на SQL Server-e "работает годами". С2 аудит тоже предназначен работать годами (хотя это конечно жесть).
У меня, например, события группы SecurityAudit тоже "собираются годами". Без фильтров сейчас набегает мегабайт 700-800 за неделю при очень активном использовании БД и большом объеме "мусора", который при желании можно было бы фильтровать.
Ну и про запросы: для трассировок есть SQL-функция чтения *.trc-файлов из которой можно делать сразу Select-ы или складывать все в табличку БД.
17 июн 14, 18:07    [16177797]     Ответить | Цитировать Сообщить модератору
 Re: DDL trigger: как записать  [new]
valv
Member

Откуда:
Сообщений: 122
gang
Дефолтный трейс на SQL Server-e "работает годами". С2 аудит тоже предназначен работать годами (хотя это конечно жесть).
У меня, например, события группы SecurityAudit тоже "собираются годами". Без фильтров сейчас набегает мегабайт 700-800 за неделю при очень активном использовании БД и большом объеме "мусора", который при желании можно было бы фильтровать.
Ну и про запросы: для трассировок есть SQL-функция чтения *.trc-файлов из которой можно делать сразу Select-ы или складывать все в табличку БД.

спасибо gang! сейчас проверил, действительно функция fn_trace_gettable читает trc-файлы. конечно очень тяжёлое решение, но хоть что-то.
17 июн 14, 18:46    [16177953]     Ответить | Цитировать Сообщить модератору
 Re: DDL trigger: как записать  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8834
автор
это требование по логгированию важных данных

Придет сисадмин и потрёт все эти важные данные вместе с трейсами и базами данных. Неужели намек не понятен, что надо ограничивать права на DDL?
17 июн 14, 18:49    [16177968]     Ответить | Цитировать Сообщить модератору
 Re: DDL trigger: как записать  [new]
invm
Member

Откуда: Москва
Сообщений: 9844
valv,

Можно еще EVENT NOTIFICATION для AUDIT_DATABASE_OBJECT_MANAGEMENT_EVENT.
Ну и в сторону SERVER AUDIT можно посмотреть.
17 июн 14, 19:21    [16178086]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить