Лично я предпочитаю создавать контрольные таблицы в базе данных и заполнять триггеры, чтобы сохранять любые изменения, даже специальные запросы из окна запроса. Я бы никогда не подумал о решении для аудита, которое не основано на самой базе данных. Это важно, потому что люди, которые вносят злонамеренные изменения в базу данных или совершают мошенничество, вряд ли будут делать это через веб-интерфейс, а напрямую через бэкэнд. Гораздо больше всего этого происходит от недовольных или воровавших сотрудников, чем от внешних хакеров. Если вы уже используете ORM, ваши данные находятся под угрозой, потому что разрешения находятся на уровне таблицы, а не на уровне sp, к которому они принадлежат. Поэтому еще более важно, чтобы вы зафиксировали любое возможное изменение данных, а не только то, что было из GUI. У нас есть динамический процесс создания таблиц аудита, который запускается при добавлении новых таблиц в базу данных. Поскольку наши таблицы аудита заполняют только изменения, а не всю запись, нам не нужно менять их каждый раз, когда добавляется поле.
Также при оценке возможных решений обязательно учитывайте, насколько сложно будет восстановить данные, чтобы отменить конкретное изменение. Как только у вас появятся таблицы аудита, вы обнаружите, что это одна из самых важных вещей, которую вам нужно сделать из них. Также подумайте, насколько сложно будет поддерживать информацию при изменении схемы базы данных.
Выбор решения, потому что оно кажется наиболее простым для понимания, обычно не является хорошей идеей. Это должно быть самым низким из ваших критериев отбора после выполнения требований, безопасности и т. Д.