Informasi latar belakang:
- Saya membuat koleksi tabel audit untuk melacak pembaruan dan menghapus satu set tabel data untuk aplikasi saya.
- Catatan audit dibuat melalui pemicu.
- DML dalam basis data aplikasi saya umumnya akan berasal dari login yang digunakan suatu layanan untuk masuk ke dalam basis data. Karena itu, saya pikir hasil dari
SYSTEM_USER
akan selalu sama ketika dipanggil dalam sebuah pemicu. - Aplikasi saya tidak menyimpan data pengguna saat ini, meskipun string
UserId
diberikan kepadanya setiap kali DML dilakukan (dilakukan secara eksklusif dalam prosedur tersimpan).
Masalah yang saya temui adalah ketika pengguna menghapus sebuah catatan, saya ingin tahu siapa yang melakukannya. Karena akan dilakukan dengan login yang sama, saya tidak ingin melihat bahwa semua tindakan dilakukan oleh layanan, saya ingin melihat pengguna mana yang melakukannya. Ini bukan masalah pada pembaruan, karena kami memiliki ModifiedBy
kolom yang akan diperbarui melalui dikirim UserId
pada pembaruan.
Pertanyaannya adalah: Apakah ada cara untuk mengatur SYSTEM_USER
atau memasukkan informasi pengguna ke pemicu saat penghapusan dijalankan?
Ide "terbaik" yang saya miliki saat ini, meskipun saya tidak yakin apakah itu ide yang bagus, adalah bahwa dalam layanan saya memeriksa untuk melihat apakah saat UserId
ini ada dalam database sebagai pengguna, dan jika tidak membuat pengguna objek untuk mereka. Kemudian jalankan prosedur tersimpan dengan EXECUTE AS User = @UserId
. Kemudian ketika DML dilakukan dalam prosedur tersimpan dan pemicu kebakaran, SYSTEM_USER
harus mengembalikan pengguna dari EXECUTE AS
.