Audit Logging-Strategien

7

Ich versuche, die beste Methode für die Protokollierung von Protokollen innerhalb meiner Anwendung zu bestimmen. Der Hauptgrund für das Protokoll ist die Meldung der Reihenfolge der Ereignisse (Änderungen).

Ich habe eine Hierarchie von Objekten, ich muss Berichte erstellen, wenn sich etwas an irgendeinem Teil dieser Hierarchie zu einem späteren Zeitpunkt ändert.

Ich denke, dass ich drei Möglichkeiten habe:

  1. Lassen Sie sich für jede Tabelle ein Protokoll erstellen, das der Hierarchie der Objekte entspricht und dann eine Ansicht für den Bericht erstellt.
  2. Reduzieren Sie die Hierarchie und de-normalisieren Sie die Tabelle, um die Berichterstellung zu vereinfachen - einfache SELECT-Anweisung.
  3. Verfügen Sie über eine Protokolltabelle und einen Datensatz für jede Änderung, um die Berichterstellung zu erschweren, aber flexibler für Änderungen.

Ich stehe derzeit auf Option 1.

    
Nathan Fisher 05.03.2009, 23:57
quelle

5 Antworten

5

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

Ich denke, eine flache Ansicht wäre besser, da sie leicht geordnet und abgefragt werden kann. Also lehne ich mich eher Ihrer Option # 2 / # 3 zu.

Fügen Sie Dinge wie den Transaktionstyp, die Uhrzeit, die Benutzer-ID, eine Beschreibung der Änderungen und andere relevante Informationen zu Ihrem Produkt hinzu.

Sie können Ihrem Produkt im Laufe der Zeit auch Dinge hinzufügen und müssen Ihr Audit-Log-Modul nicht ständig ändern.

    
Brian R. Bondy 06.03.2009, 00:01
quelle
10

Ich muss mit diesem Thema sprechen, obwohl es alt ist.

Es ist in der Regel eine schlechte Idee, nur eine Audit-Tabelle zu haben, da Sie in der Datenbank Sperrprobleme erzeugen, wenn alles auf diese Tabelle trifft. Verwenden Sie für jede Tabelle separate Audit-Tabellen.

Es ist auch eine schlechte Idee, dass die Anwendung das Auditing durchführt. Die Prüfung muss auf Datenbankebene erfolgen oder Sie riskieren den Verlust einiger Informationen. Daten ändern sich nicht nur von Anwendungen in den meisten Datenbanken; Niemand wird die Preise aller ihrer Produkte einzeln von der Benutzeroberfläche aus ändern, wenn Sie eine 10% ige Erhöhung auf alle 10.000.000 von ihnen benötigen. Auditing sollte alle Änderungen erfassen, nicht nur einige von ihnen. Dies sollte in den meisten Datenbanken in einem Trigger erfolgen (SQL Server 2008 verfügt über eine integrierte Überwachungsfunktion). Einige der schlimmsten möglichen Änderungen (Mitarbeiter, die betrügen oder Daten böswillig vernichten wollen) kommen häufig auch von anderen Orten als der Anwendung, insbesondere wenn Sie Benutzern auf Tabellenebene Zugriff gewähren (was Sie in keiner oder einer anderen Finanzdatenbank tun sollten) Persönliche Angaben). Auditing aus der Anwendung wird dies nicht erfassen. Entwickler vergessen oft, dass beim Schutz ihrer Daten nicht nur externe Quellen die einzige Bedrohung darstellen.

    
HLGEM 08.01.2010 23:06
quelle
3

Wenn es sich um Auditing-Zwecke handelt, würde ich ein echtes Append-Only-Medium anstelle einer Tabelle / Tabellen in derselben Datenbank verwenden.

Sie schlagen vor, dass es für Änderungsverlaufszwecke verwendet wird - in diesem Fall würde ich Ihre Anwendung / db neu strukturieren, um die tatsächlichen Ereignisse an erster Stelle und nicht nur den aktuellen Status aufzuzeichnen.

    
Draemon 06.03.2009 00:15
quelle
1

Ich würde mit (2) und (3) gehen: Erstellen Sie eine einzige Tabelle für alle Audit-Einträge.

Eine flache Ansicht ist gut, vorausgesetzt, die zusätzliche Abflachung wirkt sich nicht auf die Leistung aus.

    
Mitch Wheat 06.03.2009 00:33
quelle
0

Sie könnten in ein AOP-Framework schauen, um dabei zu helfen. Damit können Sie die Protokollierungsfunktion am Anfang oder am Ende jeder / aller Methoden einfügen. Wenn Sie diesen Weg gehen, könnte es helfen zu definieren, was sinnvoll wäre, um die Protokolldaten zu speichern.

    
Andy White 06.03.2009 00:39
quelle

Tags und Links