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

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

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

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

6.08.2008 18:39:33
SQL Server 2008 имеет некоторую встроенную поддержку с новой функцией захвата данных изменений < msdn.microsoft.com/en-us/library/bb522489.aspx >
andyp 29.08.2008 17:42:40
Следует отметить, что эта функция доступна только в редакции Enterprise.
user17060 9.02.2009 18:38:20
Функция сбора данных изменений также, кажется, больше предназначена для обеспечения того, чтобы объекты приложений соответствовали базе данных, а не решению для аудита. (Например, он хранит только изменения за 2 дня.) Вам все равно нужно опросить изменения и записать их в таблицу, так что вы можете просто создать и использовать триггеры для записи в центральную таблицу аудита, как показано ниже. О, и указанный выше URL не работает, используйте эту ссылку .
BJury 1.10.2013 10:06:18
6 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

18
6.08.2008 19:35:51

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

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

1
6.08.2008 18:49:23

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

1
6.08.2008 19:56:14

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

1
23.05.2017 12:13:34

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

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

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

2
13.11.2018 23:39:40

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

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

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

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

6
10.05.2013 09:41:37