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

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

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

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

 

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

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

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

 

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

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

 

[OmniAudit](http://www.krell-software.com/omniaudit/) может быть хорошим решением для вас нужно. Я никогда не использовал его раньше , потому что я очень счастлив писать свои собственные процедуры аудита, но это звучит хорошо.

 

Я использую подход , описанный Грег в своем [ответе](https://stackoverflow.com/questions/3823/suggestions-for-implementing-audit-tables-in-sql-server#3848) и заполнить таблицу аудита с хранимой процедурой , называемой из таблицы триггеров.

 

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

Использование CLR и одной таблицы аудита.   

[Создание универсального триггера аудита с SQL 2005 CLR](http://web.archive.org/web/20090429064008/www.sqljunkies.ddj.com/Article/4CD01686-5178-490C-A90A-5AEEF5E35915.scuk)

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

[Как аудит изменений данных SQL Server?](http://sqlserver2000.databases.aspfaq.com/how-do-i-audit-changes-to-sql-server-data.html)

 

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

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

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

Другой вариант заключается в использовании стороннего инструмента для этого , таких как [ApexSQL аудита](http://www.apexsql.com/sql_tools_audit.aspx) или функции отслеживания измененных данных в SQL Server.