Frage

Ich versuche, über die beste Methode für die Audit-Protokollierung in meiner Anwendung zu entscheiden. Der Hauptgrund für das Protokoll berichtet, die Abfolge der Ereignisse (Änderungen).

Ich habe eine Hierarchie von Objekten, muß ich Berichte erstellen, wenn etwas auf einem beliebigen Teil dieser Hierarchie ändert, zu einem späteren Zeitpunkt.

Ich glaube, ich habe drei Optionen:

  1. Haben Sie ein Protokoll für jede Tabelle und damit die Hierarchie von Objekten passende dann eine Ansicht für den Bericht zu erstellen.
  2. Flatten die Hierarchie und die Tabelle de-normalisiert, so dass einfache Berichterstattung -. Einfache select-Anweisung
  3. Haben Sie eine Log-Tabelle und haben einen Datensatz für jede Änderung vornehmen Berichterstattung härter aber flexibler auf Veränderungen.

Ich bin Neigung zur Zeit auf Option 1.

War es hilfreich?

Lösung

Ein Audit-Protokoll ist im Grunde eine chronologische Liste der Ereignisse, die aufgetreten sind, die diese Ereignisse durchgeführt wird, und dem, was die Ereignisse waren.

Ich denke, eine flache Ansicht wäre besser, da es leicht bestellt werden kann und abgefragt. So lehne ich mehr in Richtung Ihrer Wahl # 2 / # 3.

Fügen Sie Dinge wie die Transaktionsart, die Zeit, die Benutzer-ID, eine Beschreibung dessen, was sich verändert hat, und andere relevante Informationen zu Ihrem Produkt.

Sie können auch Dinge, um Ihr Produkt im Laufe der Zeit, und Sie werden nicht ständig Ihren Audit-Log-Modul ändern müssen.

Andere Tipps

Ich habe auch zu diesem Thema zu sprechen, obwohl es alt.

Es ist in der Regel eine schlechte Idee, nur ein Audit-Tabelle zu haben, wie Sie Probleme mit dem Sperren in der Datenbank erstellen werden als alles, was die Tabelle trifft. Verwenden Sie separate Audit-Tabellen für jede Tabelle.

Es ist auch eine schlechte Idee der Anwendung tut die Prüfung zu haben. Audit muss auf Datenbankebene durchgeführt werden, oder Sie einige der Informationen, besteht die Gefahr, zu verlieren. Daten ändert sich nicht nur aus Anwendungen in den meisten Datenbanken; niemand wird die Preise für alle ihre Produkte einer nach dem anderen von der Benutzeroberfläche ändern, wenn Sie eine 10% ige Erhöhung für alle 10 Millionen von ihnen benötigen. Revision sollten alle Änderungen erfassen nicht nur einige von ihnen. Dies sollte in einem Trigger in den meisten Datenbanken (SQL Server 2008 verfügt über eine integrierte in Revision) durchgeführt werden. Einige der schlimmsten Potenzial möglichen Veränderungen (Mitarbeiter Betrug zu begehen oder zu wollen böswillig Daten zerstören) auch häufig von anderen Orten als die Anwendung sind vor allem, wenn Sie Tabellen Ebene Zugang zu den Nutzern ermöglichen (die Sie in keiner Finanzdatenbank tun sollen, oder eine, die enthält persönliche Informationen). Revision von der Anwendung wird dies nicht fangen. Entwickler oft vergessen, dass ihre Daten zu schützen, externe Quellen sind nicht die einzige Bedrohung.

Wenn es für Prüfzwecke ist ich ein wahres Append-only-Medium verwenden würde, anstatt eine Tabelle / Tabellen in derselben db.

Sie legen nahe, es ist für Änderungshistorie Zwecke - in dem Fall, dass ich Ihre Anwendung / db restrukturieren würde die tatsächlichen Ereignisse in erster Linie nicht nur den aktuellen Zustand aufnehmen

.

Ich würde mit (2) und (3):. Einer einzelnen Tabelle für alle Audit-Einträge erstellen

Eine flache Ansicht ist gut, vorausgesetzt, dass die zusätzliche Arbeit Abflachung Leistung nicht beeinträchtigen.

Sie könnten einen AOP Framework aussehen in dieser zu helfen. Es würde dir erlauben, Logging-Funktionalität am Anfang oder Ende jeder / alle Methoden zu injizieren. Wenn Sie diesen Weg gehen, könnte helfen, es zu definieren, was Sinn für die Speicherung der Log-Daten machen würde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top