2016-11-20 3 views
0

Мне нужно создать таблицу Audit, которая будет отслеживать действия (вставка, обновление, удаление) моих таблиц в базе данных и добавлять новую строку с датой, идентификатором строки , имя таблицы и еще несколько деталей, поэтому я буду знать, что произошло и когда.Создание триггера при создании каждой таблицы в SQL Server 2008 R2

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

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

Возможно ли создать триггер DDL для create_table и внутри него другой триггер для вставки/обновления/удаления?

+0

Почему вы не создаете триггер при создании таблицы. Если вы хотите автоматизировать, вам, возможно, придется реализовать триггер DDL в вашей базе данных –

+0

, о чем я думаю, но я пытаюсь выяснить, как это сделать. Я не уверен, понимаю ли я это правильно, но я пытаюсь создать триггер DDL для create_table, а внутри него пишут еще один триггер, который создает триггер для имени конкретной таблицы при вставке/обновлении/удалении. – kresa

ответ

1

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


Сначала

... триггер в базе данных, которая собирается отслеживать новое создание таблицы.

Я не могу не подчеркнуть, как страшная эта идея. У кого именно такой неограниченный доступ к вашей базе данных, что они могут создавать таблицы без прохождения кода-обзора и QA? Который должен, конечно, быть на закрытом пути по направлению к продукции. Как только вы поймете, что изменений схемы не должно произойти ad-hoc, очевидно, что вам не нужны триггеры (которые по своей природе реактивный), чтобы что-то сделать, потому что схема изменилась.

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

Лучшие варианты включают:

  • Требования оценки и признания: Это новая информация в системе. Каковы требования к аудиту?
  • Обзор дизайна: Новая таблица; Нужно ли проводить аудит?
  • Тестирование: как проверить требования аудита?
  • Обзор кода: вы добавили новую таблицу. Нужно ли проводить аудит?
  • Не включая функции, предоставляемые такими инструментами, как:
  • Источник управления.
  • Утилиты для развертывания Db (независимо от того, являются ли они домашними или третьими лицами).

Часть два

... триггер будет создан для этой таблицы, которая собирается отслеживать действия и добавлять новые строки для таблицы аудита по мере необходимости.

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

Это популярный подход, и я уверен, что получаю некоторые средства от людей, которые прекрасно разделяют их особый вкус; ругаясь, сколько времени оно «спасает». (Там даже может быть претензий к нему являются «бизнес требование», которое я могу заверить вас, более вероятно, искажены версия требования к реального.)

Там являются фундаментальные проблемы, связанные с этим подходом:

  • Это реактивный вместо активного. Поэтому обычно не хватает контекста.
  • Вы будете изо всех сил пытаться проверять сделанные изменения, которые откатываются назад. (Что может быть кошмаром для отладки и, как правило, нарушает требования реального бизнеса аудита.)
  • Устный аудит будет кошмар, потому что это только исходные данные. информация утерян в деталях.
  • Поскольку столбцы добавлены/переименованы/удалены, ваши данные аудита теряют целостность. (Это, как правило, наименьшее из проблем.)
  • Эти дополнительные таблицы, которые всегда обновляются как часть других обновлений, могут нанести ущерб производительности.
  • Обычно этот стиль аудита включает в себя: каждый раз, когда столбец добавляется в «базовую» таблицу, он также добавляется в таблицу «аудит». (Это в конечном счете делает «аудит» таблицу очень похоже на плохо архитектуры персистирующего журнала транзакции.)
  • Большинство людей после такого подхода упускать из вида значения обнуляемых столбцов в таблицах «базовых».

Я могу сказать вам из первых рук, что интерпретация таких аудиторских маршрутов в любом, но в простейшем случае непросто. Количество времени, потраченного впустую, является смешным: исследование проблем, обучение других, чтобы они могли правильно их интерпретировать, написание утилит, чтобы попытаться сделать работу с этими аудиторскими тропами менее болезненной, тщательно документируя результаты (потому что информация не сразу проявляется в необработанных данных) ,

Если у вас есть чувство самосохранения, вы прислушаетесь к моему совету.


Сделать большой

(К сожалению, не удержалась.)

Лучший подход активно план для того, что нуждается в ревизии. Нажмите для определенных бизнес-требований. Обратите внимание, что в разных случаях могут потребоваться различные методы аудита:

  • Если пользователь выполняет действие X, запишите данные о действии для юридической отслеживаемости.
  • Если пользователь пытается выполнить Y, но это предотвращено системными правилами, записывайте данные B для отслеживания целостности системы правил.
  • Если пользователь не выполнил вход в систему, запишите данные C в целях безопасности.
  • Если система обновлена, запишите данные D для устранения неполадок.
  • Если возникают определенные системные события, подробности запись E ...

Важно то, что, как только вы знаете реальные бизнес-требования, вы не будете говорить: «Ну, давайте просто Отслеживать все. Это может быть полезно ». Вместо этого вы будете:

  • Уметь создавать более подходящую и надежную конструкцию для каждого отдельного вида аудита.
  • Уметь test что он ведет себя по мере необходимости!
  • Можете использовать данные аудита более легко, когда это необходимо.

 Смежные вопросы

  • Нет связанных вопросов^_^