2008-08-06 3 views
27

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

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

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

+2

SQL Server 2008 имеет встроенную поддержку с новой функцией «Захват данных данных» andyp

+1

Следует отметить, что эта функция является только доступный в издании Enterprise. – user17060

+0

Функция Change Data Capture также больше подходит для обеспечения того, чтобы объекты приложений поддерживались в соответствии с базой данных, а не решением для аудита. (Например, он сохраняет только 2 дня изменений.) Вам все равно нужно опросить изменения и записать их в таблицу, чтобы вы могли просто создавать и использовать триггеры для записи в таблицу централизованного аудита, как показано ниже. О, и приведенный выше URL-адрес сломан, используйте эту ссылку [http://msdn.microsoft.com/en-us/library/bb933874.aspx]. – BJury

ответ

17

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

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

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

1

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

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

1

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

1

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

6

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

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

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

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