Verfolgung von Benutzer-Aktivität-Protokoll für den SQL-Server-Datenbank
Ich habe eine Datenbank mit mehreren Tabellen, und ich möchte zu Protokoll der Benutzer-Aktivität über mein MVC 3-Webanwendung.
User X updated category HELLO. Name changed from 'HELLO' to 'Hi There' on 24/04/2011
User Y deleted vehicle Test on 24/04/2011.
User Z updated vehicle Bla. Name changed from 'Blu' to 'Bla' on 24/04/2011.
User Z updated vehicle Bla. Wheels changed from 'WheelsX' to 'WheelsY' on 24/04/2011.
User Z updated vehicle Bla. BuildProgress changed from '20' to '50' on 24/04/2011
Meine erste Idee ist, auf alle meine Aktionen, die die Datenbank crud, hinzufügen von ein paar Zeilen code, geben Sie die Zeichenfolgen in einer Tabelle.
Gibt es eine bessere Möglichkeit, zu überprüfen, welche Tabelle und Spalte, die geändert wurde, als hier jede Spalte einzeln mit if-Anweisungen (zuerst wähle ich die aktuellen Werte, dann überprüfen Sie jeden von Ihnen mit dem Wert von der textbox -) ich wusste, dass für eine andere ASPX-web-app-und es war schmerzhaft.
Nun, dass ich mit MVC und ADO.NET Entity Data Model-ich Frage mich, ob ein schneller Weg, um die Spalten, die geändert wurden, und erstellen ein Protokoll wie oben.
- Hi hast du einen Weg finden, dies zu tun? Und was die DB-Struktur verwenden Sie zum speichern dieser info... ich habe das gleiche Problem jetzt 🙂 Danke
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie auch erreichen dies, indem Sie Ihre Datenbank in die volle recovery-Modus und dann das Transaktionsprotokoll Lesen.
Wenn die Datenbank im vollständigen Wiederherstellungsmodus, dann sql server-logs alle Update -, insert-und delete (und andere, wie z.B. erstellen, ändern, löschen..) - Anweisungen in das Transaktionsprotokoll.
So, mit diesem Ansatz, den Sie nicht brauchen, um jede zusätzliche änderungen an Ihrer Anwendung oder Ihres Datenbank-Struktur.
Aber Sie müssen 3rd-party -sql Transaktionsprotokoll Leser. Red gate hat eine Kostenlose Lösung für sql server 2000. Wenn Ihr server 2005 oder höher würden Sie wahrscheinlich wollen zu gehen mit ApexSQL Log
Auch dieser Ansatz nicht in der Lage, audit-select-Anweisungen, aber es ist definitiv am einfachsten zu implementieren, wenn Sie nicht wirklich brauchen, um audit-select-Abfragen.
So wie ich das sehe, haben Sie zwei Möglichkeiten:
Log
TabelleODER
Log
Tabelle. Natürlich, dass die Codierung auf Ihre Daten Zugreifen Schicht.Durch die Art und Weise, wenn Sie eine gute code-Struktur/- Architektur, würde ich wählen Sie die zweite option.
Haben, könnten Sie einen trigger (AFTER insert/update/deelte) auf die Tabelle, die Sie überwachen möchten. Die Schönheit ist columns_updated () - das gibt einen barbinary Wert, der angibt, welche Spalten aktualisiert wurden.
Hier einige code-snippet, das ich in jeder trigger:
Ich habe eine spezielle Funktion, die decodiert die bit-Werte, aber für einige Grund es nicht einfügen hier gut. Nachricht mich und ich werde Ihnen per E-Mail.