Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - Datenbankzugriff mit mehreren Applikationsbenutzern


timo12 - Mo 14.12.09 08:51
Titel: Datenbankzugriff mit mehreren Applikationsbenutzern
Hallo,

ich habe eine Applikation die mit eigenen Benutzer arbeitet. Die Benutzer werden in der DB (mssql) gespeichert. Nun möchte ich aber auch ein Logging haben, bei dem ich sehen kann welcher Benutzer was verändert hat.
Wenn ich jeden Applikationsnutzer auf der DB anlegen (was ich sehr umständlich, fehleranfällig und zeitraubend empfinde) kann ich das ja relativ einfach über Trigger auf den Tabellen realisieren, da ich ja den Benutzer habe.

Wenn ich aber aus der Applikation immer nur mit einem SQL-User für alle Nutzer mich an der DB anmelde, wie mache ich das dann? Da weiß der Trigger ja nichts von meinem Benutzernamen in der Applikation. Kann ich der SQLConnection nicht irgend einen Wert mitgeben, der den User angibt, die der Trigger auselesen kann?

Gruß Timo


Kha - Mo 14.12.09 19:09

Wenn es mit Triggern nicht funktioniert, dann lass die DB doch ganz außen vor und logge stattdessen selbst an allen entsprechenden Stellen im Data Access Layer. Je nachdem, wie der aussieht oder überhaupt existiert, dürfte das ziemlich einfach oder äußerst komplex werden ;) .


CurdledMilk - Mo 18.01.10 16:30

Wie user profile iconKha schon geschrieben hat kann das sehr viel arbeit machen =) Ein nützliches "tool" zum loggen ist log4net http://code-inside.de/blog/2009/05/08/howto-logging-mit-log4net/

Wenn du es trotzdem auf der Datenbank machen willst musst du bei jedem vorgang den es zu loggen gilt einen "nutzername" parameter mit schicken (z.B. bei allen Prozeduren die ein Insert oder Update machen). Dann kannst du dir eine Tabelle machen die folgenden aufbau hat:

LogID - Int
Zeit - Datetime
Nutzername - varchar(n)
Prozedurname - varchar(n)
Parameter - varchar(n) = dort schreibst du dann sowas wie "parameter1 = wert1, parameter2 = wert2, ...") rein

darauf kannst du dann auch schön auswertungen betreiben