2010-04-19 58 views
3

假設您具有以下內容...調用存儲過程以刪除記錄的ASP.NET Web應用程序。該表上有一個觸發器,每次刪除一條記錄時都會插入一條審計條目。我希望能夠在審覈記錄中記錄誰刪除了記錄的用戶名。實現這一目標的最佳途徑是什麼?我知道我可以刪除觸發器並讓刪除存儲過程在刪除之前插入審計條目,但是還有其他推薦的替代方法嗎?使用觸發器來記錄審計信息與存儲過程

如果一個用戶名作爲參數傳遞給了刪除存儲過程,那麼是否有這個值在觸發器中被刪除時被刪除?我只是把它扔在那裏...

+0

http://stackoverflow.com/questions/695817/whats-the-best-way-to-audit-log-deletes的可能重複 – gbn 2010-04-20 04:58:35

回答

2

觸發背景下訪問當前用戶,通過SQL服務器所看到的(即。ASP用來連接到SQL的用戶):USER_NAME()

如果您在調用SQL時不模擬Web用戶,那麼通常的技巧就是在會話上下文中設置當前用戶,從觸發器代碼中可以檢索到該用戶,請參閱Using Session Context Information

0

讓你的應用程序傳遞刪除者的用戶名。

在你刪除存儲過程:

UPDATE Customer 
SET DeletedBy = @DeletedBy 
WHERE ID = @ID 

在你的觸發器,使用相同的價值:

INSERT INTO MyDeletedLog (ID, DeletedBy) 
2

使用觸發器的優點是您可以確定它是通用的 - 對錶格的任何修改都將被審覈。就如何與觸發器進行通信而言,您可以在表格中使用一個字段,例如「LastModifiedBy」。觸發器本身可以在執行時清除該字段,以便如果在沒有設置字段的情況下發生更新,則審計表將會提取用戶未提供的信息。