Informazioni di base:
- Sto creando una raccolta di tabelle di controllo per tenere traccia degli aggiornamenti e delle eliminazioni in una serie di tabelle di dati per la mia app.
- I record di controllo vengono creati tramite trigger.
- Il DML nel database della mia app proviene generalmente da un accesso utilizzato da un servizio per accedere al database. Per questo motivo, penso che il risultato
SYSTEM_USER
sarà sempre lo stesso quando chiamato in un trigger. - La mia app non memorizza i dati utente al momento, anche
UserId
se ogni volta che viene eseguito DML viene eseguita una stringa (eseguita esclusivamente nelle stored procedure).
Il problema che ho riscontrato è che quando un utente elimina un record, voglio sapere chi è stato. Poiché verrà eseguito dallo stesso accesso, non voglio vedere che tutte le azioni sono state eseguite dal servizio, voglio vedere quale utente lo ha fatto. Questo non è un problema su un aggiornamento, perché abbiamo ModifiedBy
colonne che verranno aggiornate tramite un inviato UserId
su aggiornamenti.
La domanda è: c'è un modo per impostare SYSTEM_USER
o altrimenti ottenere le informazioni dell'utente nel trigger quando viene eseguita un'eliminazione?
L'idea "migliore" che ho in questo momento, anche se non sono ancora sicuro che sia una buona idea, è che nel servizio controllo per vedere se la corrente UserId
è nel database come utente e se non crea un utente obiettare per loro. Quindi eseguire le stored procedure con EXECUTE AS User = @UserId
. Quindi, quando DML viene eseguito nella procedura memorizzata e il trigger si attiva, SYSTEM_USER
dovrebbe restituire l'utente dal EXECUTE AS
.