Предложения по реализации таблиц аудита в SQL Server?

StackOverflow https://stackoverflow.com/questions/3823

Вопрос

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

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

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

Это было полезно?

Решение

Сколько писать против.вы ожидаете прочтения этой таблицы(ок)?

Я использовал одну таблицу аудита со столбцами для Table, Column, OldValue, NewValue, User и ChangeDateTime - достаточно универсальной, чтобы работать с любыми другими изменениями в БД, и хотя в эту таблицу было записано МНОГО данных, отчеты данные по этим данным были достаточно скудными, чтобы их можно было запускать в периоды низкой нагрузки в течение дня.

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

Другие советы

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

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

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

Другой вариант — использовать для этого сторонний инструмент, например АпексSQL-аудит или функция отслеживания измененных данных в SQL Server.

Я нашел эти две ссылки полезными:

Использование CLR и единой таблицы аудита.
Создание общего триггера аудита с помощью SQL 2005 CLR

Использование триггеров и отдельной таблицы аудита для каждой проверяемой таблицы.
Как проверить изменения в данных SQL Server?

Существуют ли встроенные пакеты аудита?У Oracle есть хороший пакет, который даже отправляет изменения аудита на отдельный сервер, недоступный любому злоумышленнику, изменяющему SQL.

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

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

Я использую подход, описанный Грегом в его отвечать и заполнить таблицу аудита хранимой процедурой, вызываемой из триггеров таблицы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top