Предложения по внедрению таблиц аудита в SQL Server? - PullRequest
29 голосов
/ 06 августа 2008

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

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

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

Ответы [ 6 ]

17 голосов
/ 06 августа 2008

Сколько вы ожидаете писать и читать эти таблицы?

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

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

6 голосов
/ 10 мая 2013

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

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

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

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

2 голосов
/ 01 сентября 2008

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

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

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

1 голос
/ 07 августа 2008

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

1 голос
/ 06 августа 2008

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

1 голос
/ 06 августа 2008

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

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

...