2013-07-28 114 views
0

我創建了一個觸發器來審計來自我的web應用程序對錶行的更改。我的Web應用程序使用單個數據庫用戶來更新數據庫。但是,許多不同的用戶可以登錄到網站並進行更新和插入。因此,數據庫的用戶將永遠是相同的,但網絡用戶將是不同的捕獲sql服務器觸發器中的web會話信息

我想有一些方法來捕獲登錄的用戶到正在進行更改的行的網站,以便我可以審覈沿與正在進行更改的Web用戶進行交互。

有人可以請指導我如何捕捉我的SQL觸發器中的網絡會話,以便我知道誰在進行更改。我可以配置web.config文件,從而使會話信息也傳遞到SQL服務器觸發器或有一些其他的方式,請讓我知道

問候

阿里夫

回答

0

最可靠的方法是讓您將此LoggedInUserId傳遞到已修改的表(可能存儲在ModifiedBy列中)。這可能是一個執行和維護的痛苦,尤其是在遺留系統中,但其堅如磐石。

我已經使用CONTEXT_INFO將一小部分元數據與會話相關聯,但它也不乏奇怪之處。

一個簡單的例子:

declare @context varbinary(128); 
select @context = cast('[email protected]' as varbinary(128)); 
set context_info @context; 
go 

,並從觸發器可以檢索喜歡的用戶名:

declare @context varchar(128); 
select @context = cast(context_info() as varchar(128)); 
select @context; 

BOL指出,當範圍終止,所以你需要這些數據不會被重置考慮避免用戶標識跨越DML操作(連接池)。