none
User bezogenes Transaktions Logging von Datentabellen Änderungen auf App Ebene RRS feed

  • Frage

  • Hallo,

    unsere Business App hat die Anforderung, dass Änderungen an Datensätzen protokolliert werden müssen - auf Feldebene.

    Nun arbeite ich i.d.R. mit dem MSSQL Dataadapter von .net 4.0 Framwork und verwende den Update Befehl um Daten zurückzuschreiben. Ich möchte dazu aber für jede Feldänderung in einer eigenen Tabelle ein Logging durchführen, so das Änderungen nachvollziehbar sind.

    Meine Frage: Gibt es fertige Klassen(Bibliothek) oder Code Snips oder Beispiele die die Aufgabe der Protokollierung übernehmen? Kann mir vorstellen, dass das im Rahmen der Datenschutzanforderung/verordnungen öffters anstehen dürfte.

    Gefordert ist das protokollieren von:

    - UserID
    - Dataum Zeit
    - Tabellenname
    - Feld alter Wert, neuer Wert

    Wäre toll wenn ich das Rad nicht neu erfinden müsste.

    Freue mich über Feedback

    Harald

    PS: Die Datenbank der App wird über einen fixen User, unabhängig vom User der App gemanaged

    Montag, 1. August 2016 14:35

Antworten

  • Hi Harald,
    da Du vom Update-Befehl schreibst, vermute ich, dass Du DataAdapter nutzt. Beim DataAdapter gibt es Ereignisse, die Du abonnieren kannst. Dort bekommst Du die DataRow mit Originalversion und CurrentVersion usw. Da musst Du aber durch die Felder iterieren, um Differenzen zu erkennen.

    Nicht zu lösen sind damit aber Änderungen, die der Datenbankserver ausführt (Vergabe von Autowerten und Änderungen durch Trigger).


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks
    Kommas richtig setzen! Leben retten!
    Wir essen Opa.
    Wir essen, Opa.

    • Als Antwort markiert hg4711 Montag, 1. August 2016 16:36
    Montag, 1. August 2016 15:15
  • Hallo Harald,

    üblicherweise würde man das über einen Trigger auf Datenbank Seite machen, da der unabhängig von dem Programm arbeitetet.

    Das gibt es käuflich oder aber man konstruiert den Triggerr selbst, siehe z. B.: Trigger to audit table changes, wo es über Xml Satz zusammenfasst gefasst wird (und ein Hinweis auf ein Produkt gegeben wird). Will man kein Xml sollte man von der Geschwindigkeit her eher eine Versionierung verwenden, d. h. die vorherigen Versionen speichern, anstatt Spalte für Spalte eine Zeile anzulegen.

    Die SQL Server Enterprise Edition unterstützt es über Data Capture - aber eben nur die Enterprise Edition.

    Gruß Elmar
    • Als Antwort markiert hg4711 Dienstag, 2. August 2016 06:18
    Montag, 1. August 2016 16:36
    Beantworter

Alle Antworten

  • Hi Harald,
    da Du vom Update-Befehl schreibst, vermute ich, dass Du DataAdapter nutzt. Beim DataAdapter gibt es Ereignisse, die Du abonnieren kannst. Dort bekommst Du die DataRow mit Originalversion und CurrentVersion usw. Da musst Du aber durch die Felder iterieren, um Differenzen zu erkennen.

    Nicht zu lösen sind damit aber Änderungen, die der Datenbankserver ausführt (Vergabe von Autowerten und Änderungen durch Trigger).


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks
    Kommas richtig setzen! Leben retten!
    Wir essen Opa.
    Wir essen, Opa.

    • Als Antwort markiert hg4711 Montag, 1. August 2016 16:36
    Montag, 1. August 2016 15:15
  • Hallo Harald,

    üblicherweise würde man das über einen Trigger auf Datenbank Seite machen, da der unabhängig von dem Programm arbeitetet.

    Das gibt es käuflich oder aber man konstruiert den Triggerr selbst, siehe z. B.: Trigger to audit table changes, wo es über Xml Satz zusammenfasst gefasst wird (und ein Hinweis auf ein Produkt gegeben wird). Will man kein Xml sollte man von der Geschwindigkeit her eher eine Versionierung verwenden, d. h. die vorherigen Versionen speichern, anstatt Spalte für Spalte eine Zeile anzulegen.

    Die SQL Server Enterprise Edition unterstützt es über Data Capture - aber eben nur die Enterprise Edition.

    Gruß Elmar
    • Als Antwort markiert hg4711 Dienstag, 2. August 2016 06:18
    Montag, 1. August 2016 16:36
    Beantworter
  • Erst mal vielen Dank!

    Werde mich da mal einarbeiten.

    Falls es aber doch noch fertige Beispiele gibt (auch wenn sie angepasst werden müssen) würde ich mich darüber freuen.

    Harald

    Montag, 1. August 2016 16:36
  • Hallo Elmar,

    vielen Dank für deine Anregungen! Bin nur nicht so fit im SQL-Programmierung. Werde mich aber damit mal versuchen und experimentieren.

    VG

    Harald

    Dienstag, 2. August 2016 06:18
  • Hallo Harald,

    dann kann die Investition in Programme lohnen, die Dir es abnehmen - man spart Zeit (und Kosten) für die Eigenentwicklung. Unter SQL Server Audit findet man diverse Anbieter (Werbung mache ich generell nicht). Ein weiteres Beispiel für das Selbsterzeugen findet man unter:

    Pop Rivett’s SQL Server FAQ No.5: Pop on the Audit Trail

    Gruß Elmar

    Dienstag, 2. August 2016 06:45
    Beantworter