Джанго AuditTrail против реверсии - PullRequest
16 голосов
/ 04 мая 2009

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

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

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

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

Ответы [ 3 ]

5 голосов
/ 04 мая 2009

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

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

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

3 голосов
/ 04 мая 2009

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

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

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

2 голосов
/ 17 мая 2009

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

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

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

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

Так что я собираюсь с AuditTrail.

...