Предложения по внедрению таблиц аудита в SQL Server?
Один простой метод, который я использовал в прошлом, - это просто создание второй таблицы, структура которой отражает ту, которую я хочу проверять, а затем создание триггера обновления / удаления в основной таблице. Перед обновлением / удалением записи текущее состояние сохраняется в таблице аудита с помощью триггера.
Несмотря на свою эффективность, данные в таблице аудита не являются наиболее полезными или простыми в отчете. Мне интересно, есть ли у кого-нибудь лучший метод аудита изменений данных?
Обновлений этих записей не должно быть слишком много, но это очень конфиденциальная информация, поэтому для клиента важно, чтобы все изменения были проверены и легко сообщались.
6 ответов
Сколько написания и чтения этой таблицы вы ожидаете?
Я использовал одну таблицу аудита со столбцами для Table, Column, OldValue, NewValue, User и ChangeDateTime - достаточно универсальную для работы с любыми другими изменениями в БД, и хотя в эту таблицу было записано МНОГО данных, отчеты на этих данных было достаточно мало, чтобы они могли работать в периоды низкой нагрузки дня.
Добавлено: Если объем данных в сравнении с отчетностью является проблемой, таблицу аудита можно реплицировать на сервер базы данных только для чтения, что позволяет вам запускать отчеты в любое время, не прерывая работу основного сервера.
Для этого мы используем дизайн двух таблиц.
Одна таблица содержит данные о транзакции (база данных, имя таблицы, схема, столбец, приложение, которое инициировало транзакцию, имя хоста для входа в систему, с которого началась транзакция, дата, количество затронутых строк и еще пара).
Вторая таблица используется только для хранения изменений данных, чтобы мы могли отменить изменения в случае необходимости и сообщить о старых / новых значениях.
Другим вариантом является использование стороннего инструмента для этого, такого как аудит ApexSQL или функция захвата данных изменений в SQL Server.
I have found these two links useful:
Using CLR and single audit table.
Creating a generic audit trigger with SQL 2005 CLR
Использование триггеров и отдельной таблицы аудита для каждой проверяемой таблицы.
Как я могу проверить изменения в данных SQL Server?
Я использую подход, описанный Грегом в его ответе, и заполняю таблицу аудита хранимой процедурой, вызываемой из триггеров таблицы.
Есть ли какие-нибудь встроенные пакеты аудита? У Oracle есть замечательный пакет, который даже отправляет изменения аудита на отдельный сервер, недоступный любому плохому парню, который модифицирует SQL.
Их пример потрясающий... он показывает, как предупредить любого, кто изменяет таблицы аудита.
OmniAudit может быть хорошим решением для вас. Я никогда не использовал его раньше, потому что я очень рад писать свои собственные процедуры аудита, но это звучит хорошо.