Предложения по внедрению таблиц аудита в SQL Server?
Один простой метод, который я использовал в прошлом, - это просто создание второй таблицы, структура которой отражает ту, которую я хочу проверить, а затем создать триггер обновления/удаления в главной таблице. Перед обновлением/удалением записи текущее состояние сохраняется в таблице аудита с помощью триггера.
Эффективно, данные в таблице аудита не являются наиболее полезными или простыми для отчета. Мне интересно, есть ли у кого-нибудь лучший способ аудита изменений данных?
Не должно быть слишком много обновлений этих записей, но это очень чувствительная информация, поэтому клиенту важно, чтобы все изменения были проверены и легко сообщаются.
Ответы
Ответ 1
Сколько написано против чтения этой таблицы вы ожидаете?
Я использовал единую таблицу аудита с столбцами для таблицы, столбца, OldValue, NewValue, User и ChangeDateTime - достаточно общего для работы с любыми другими изменениями в БД, и в то время как много данных было записано на эту таблицы, отчеты по этим данным были достаточно скудными, чтобы их можно было запускать в периоды низкого потребления в день.
Добавлено:
Если количество данных и отчетов является проблемой, таблица аудита может быть реплицирована на сервер базы данных только для чтения, что позволяет вам запускать отчеты, когда это необходимо, без увядания мастер-сервера с выполнением их работы.
Ответ 2
Для этого мы используем для этого две таблицы.
В одной таблице хранятся данные о транзакции (база данных, имя таблицы, схема, столбец, приложение, вызвавшее транзакцию, имя хоста для входа, в котором началась транзакция, дата, количество затронутых строк и еще пара).
Вторая таблица используется только для хранения изменений данных, чтобы мы могли отменить изменения, если это необходимо, и сообщить о старых/новых значениях.
Другим вариантом является использование стороннего инструмента для этого, например ApexSQL Audit или функция "Захват данных" в SQL Server.
Ответ 3
Я нашел эти две ссылки полезными:
Использование CLR и отдельной таблицы аудита.
Создание общего триггера аудита с помощью SQL 2005 CLR
Использование триггеров и отдельной таблицы аудита для каждой проверяемой таблицы.
Как проверить изменения данных SQL Server?
Ответ 4
Существуют ли встроенные пакеты аудита? У Oracle есть хороший пакет, который даже отправит изменения аудита на отдельный сервер за пределами доступа любого плохого парня, который модифицирует SQL.
Их пример потрясающий... он показывает, как предупреждать кого-либо, изменяющего таблицы аудита.
Ответ 5
OmniAudit может быть хорошим решением для вас. Я никогда не использовал его раньше, потому что я очень счастлив писать свои собственные процедуры аудита, но это звучит хорошо.
Ответ 6
Я использую подход, описанный Грегом в ответе , и заполняет таблицу аудита хранимой процедурой, вызванной из триггеров таблицы.