2009-03-30 7 views
1

Die Benutzer-ID Ihrer Verbindungszeichenfolge ist keine Variable und unterscheidet sich von der Benutzer-ID (z. B. GUID) Ihres Programms. Wie protokolliert das Protokoll das Löschen, wenn die Benutzer-ID der Verbindungszeichenfolge statisch ist?Was ist der beste Weg Protokoll DELETEs zu überwachen?

Der beste Ort, um Einfügen/Aktualisieren/Löschen zu protokollieren, ist über Trigger. Aber mit der statischen Verbindungszeichenfolge ist es schwer zu protokollieren, wer etwas löscht. Was ist die Alternative?

Antwort

1

Mit SQL Server können Sie CONTEXT_INFO verwenden, um Informationen an den Trigger zu übergeben.

Ich benutze dies in Code (von Web-Anwendungen aufgerufen), wo ich Trigger (zB mehrere Schreibpfade auf der Tabelle) verwenden muss. Hier kann meine Logik nicht in die gespeicherten Prozeduren eingefügt werden.

0

Wir haben eine ähnliche Situation. Unsere Webanwendung läuft immer als derselbe Datenbankbenutzer, aber mit verschiedenen logischen Benutzern, die die Anwendung verfolgen und steuern.

In der Regel geben wir die logische Benutzer-ID als Parameter in jede gespeicherte Prozedur ein. Um die Löschungen zu verfolgen, löschen wir die Zeile im Allgemeinen nicht, markieren nur den Status als gelöscht, setzen die Felder LastChgID und LastChgDate entsprechend. Für wichtige Tabellen, in denen wir ein Überwachungsprotokoll (eine Kopie jedes Änderungsstatus) aufbewahren, verwenden wir die obige Methode und ein Trigger kopiert die Zeile in eine Audit-Tabelle, die LastChgID ist bereits richtig gesetzt und der Trigger muss sich keine Sorgen machen über die ID bekommen.