Используя только технологии Microsoft (MS SQL Server, C#, EAB и т. д.), если вам необходимо отслеживать изменения, внесенные в запись в базе данных, какую стратегию вы будете использовать? Триггеры, АОП на DAL, Другое? А как вы будете отображать собранные данные? Есть ли закономерность в этом? Есть ли инструмент или фреймворк, которые помогут реализовать такое решение?
Аудит изменений записей в базах данных SQL Server
Ответы (3)
Проблема со сбором измененных данных заключается в том, что он недостаточно гибок для реального аудита. Вы не можете добавить нужные столбцы. Кроме того, он по умолчанию сбрасывает записи каждые три дня (вы можете изменить это, но я не думаю, что вы можете хранить их вечно), так что вам придется выполнять дублирование записей в реальную таблицу аудита, если вам нужно хранить данные для долгое время, что типично для необходимости аудита записей (мы никогда не сбрасываем наши аудиторские записи).
Я предпочитаю триггерный подход. Вы должны быть осторожны при написании триггеров, чтобы гарантировать, что они захватят данные, если несколько записей будут изменены. У нас есть две таблицы для каждой проверяемой таблицы: одна для хранения даты и времени и идентификатора пользователя или процесса, предпринявшего действие, и одна для хранения старых и новых данных. Поскольку мы делаем много процессов записи, это очень важно для нас. Если кто-то сообщает об одной плохой записи, мы хотим увидеть, был ли это процесс, который внес изменение, и если да, то какие другие записи также могли быть затронуты.
Во время создания процесса аудита создайте сценарии для восстановления набора проверенных данных до старых значений. Гораздо проще сделать это, когда вы находитесь под прицелом, чтобы исправить ситуацию, если у вас уже есть эта настройка.
Sql Server 2008 R2 имеет встроенный поиск Change Data Capture в онлайн-книгах.
Возможно, это непопулярное мнение, но я все равно его выскажу.
Я предпочитаю хранимые процедуры для всех операций записи в базу данных. Если требуется аудит, он находится прямо в хранимой процедуре. Никакого волшебства вне кода не происходит, все, что происходит, документируется прямо в момент записи.
Если в будущем таблицу потребуется изменить, для внесения изменений необходимо обратиться к хранимой процедуре. Необходимость обновления аудита документируется тут же. А поскольку мы использовали хранимую процедуру, проще «версировать» как таблицу, так и ее таблицу аудита.