То, на что вы надеетесь, не представляется возможным. И я настоятельно рекомендую вам лучше подумать о том, чего вы действительно хотите достичь на уровне бизнеса с аудитом. Это даст гораздо более простое и практичное решение.
Сначала
... триггер в базе данных, которая собирается отслеживать новое создание таблицы.
Я не могу не подчеркнуть, как страшная эта идея. У кого именно такой неограниченный доступ к вашей базе данных, что они могут создавать таблицы без прохождения кода-обзора и QA? Который должен, конечно, быть на закрытом пути по направлению к продукции. Как только вы поймете, что изменений схемы не должно произойти ad-hoc, очевидно, что вам не нужны триггеры (которые по своей природе реактивный), чтобы что-то сделать, потому что схема изменилась.
Даже если вы могли бы написать такие триггеры: он находится на уровне метапрограммирования, который просто не стоит усилий, чтобы предвидеть все возможные перестановки.
Лучшие варианты включают:
- Требования оценки и признания: Это новая информация в системе. Каковы требования к аудиту?
- Обзор дизайна: Новая таблица; Нужно ли проводить аудит?
- Тестирование: как проверить требования аудита?
- Обзор кода: вы добавили новую таблицу. Нужно ли проводить аудит?
- Не включая функции, предоставляемые такими инструментами, как:
- Источник управления.
- Утилиты для развертывания Db (независимо от того, являются ли они домашними или третьими лицами).
Часть два
... триггер будет создан для этой таблицы, которая собирается отслеживать действия и добавлять новые строки для таблицы аудита по мере необходимости.
Я уже указал, почему делает выше автоматически является страшная. Теперь я сделаю еще один шаг, чтобы указать, что делать выше вообще также неплохая идея.
Это популярный подход, и я уверен, что получаю некоторые средства от людей, которые прекрасно разделяют их особый вкус; ругаясь, сколько времени оно «спасает». (Там даже может быть претензий к нему являются «бизнес требование», которое я могу заверить вас, более вероятно, искажены версия требования к реального.)
Там являются фундаментальные проблемы, связанные с этим подходом:
- Это реактивный вместо активного. Поэтому обычно не хватает контекста.
- Вы будете изо всех сил пытаться проверять сделанные изменения, которые откатываются назад. (Что может быть кошмаром для отладки и, как правило, нарушает требования реального бизнеса аудита.)
- Устный аудит будет кошмар, потому что это только исходные данные. информация утерян в деталях.
- Поскольку столбцы добавлены/переименованы/удалены, ваши данные аудита теряют целостность. (Это, как правило, наименьшее из проблем.)
- Эти дополнительные таблицы, которые всегда обновляются как часть других обновлений, могут нанести ущерб производительности.
- Обычно этот стиль аудита включает в себя: каждый раз, когда столбец добавляется в «базовую» таблицу, он также добавляется в таблицу «аудит». (Это в конечном счете делает «аудит» таблицу очень похоже на плохо архитектуры персистирующего журнала транзакции.)
- Большинство людей после такого подхода упускать из вида значения обнуляемых столбцов в таблицах «базовых».
Я могу сказать вам из первых рук, что интерпретация таких аудиторских маршрутов в любом, но в простейшем случае непросто. Количество времени, потраченного впустую, является смешным: исследование проблем, обучение других, чтобы они могли правильно их интерпретировать, написание утилит, чтобы попытаться сделать работу с этими аудиторскими тропами менее болезненной, тщательно документируя результаты (потому что информация не сразу проявляется в необработанных данных) ,
Если у вас есть чувство самосохранения, вы прислушаетесь к моему совету.
Сделать большой
(К сожалению, не удержалась.)
Лучший подход активно план для того, что нуждается в ревизии. Нажмите для определенных бизнес-требований. Обратите внимание, что в разных случаях могут потребоваться различные методы аудита:
- Если пользователь выполняет действие X, запишите данные о действии для юридической отслеживаемости.
- Если пользователь пытается выполнить Y, но это предотвращено системными правилами, записывайте данные B для отслеживания целостности системы правил.
- Если пользователь не выполнил вход в систему, запишите данные C в целях безопасности.
- Если система обновлена, запишите данные D для устранения неполадок.
- Если возникают определенные системные события, подробности запись E ...
Важно то, что, как только вы знаете реальные бизнес-требования, вы не будете говорить: «Ну, давайте просто Отслеживать все. Это может быть полезно ». Вместо этого вы будете:
- Уметь создавать более подходящую и надежную конструкцию для каждого отдельного вида аудита.
- Уметь test что он ведет себя по мере необходимости!
- Можете использовать данные аудита более легко, когда это необходимо.
Почему вы не создаете триггер при создании таблицы. Если вы хотите автоматизировать, вам, возможно, придется реализовать триггер DDL в вашей базе данных –
, о чем я думаю, но я пытаюсь выяснить, как это сделать. Я не уверен, понимаю ли я это правильно, но я пытаюсь создать триггер DDL для create_table, а внутри него пишут еще один триггер, который создает триггер для имени конкретной таблицы при вставке/обновлении/удалении. – kresa