Benutzer mit den meisten Antworten
User bezogenes Transaktions Logging von Datentabellen Änderungen auf App Ebene

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 WertWä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
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
-
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
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
-
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
-
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