django AuditTrail против Reversion

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

Я искал доступные решение

  1. AuditTrail - простой, и именно поэтому я склоняюсь к нему, я могу понять его код одного файла.
  2. возврат - выглядит достаточно простым в использовании, но не уверен, насколько легко было бы изменить его при необходимости.
  3. rcsField кажется очень сложным и слишком много для моих нужд

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

3 ответов


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

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

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


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

Я предполагаю, что под AuditTrail вы имеете в виду AuditTrail на Django wiki. Если это так, я думаю, вы захотите вместо этого посмотреть на HistoricalRecords разработанный тем же автором (Марти Алчин ака @gulopine) в своей книге Pro Django. Он должен работать лучше с Django 1.x.

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


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

поэтому я протестировал AuditTrail и реверсию Reversion кажется лучшим полномасштабным приложением со многими функциями (которые мне не нужны), также, насколько я знаю, он сохраняет данные в одной таблице в формате XML или YAML, что я думаю

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

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

Итак, я иду с AuditTrail.