2012-10-17 53 views
1

目前我們有一個SQL Server 2008實例建立了我們的ASP.Net MVC應用程序和SQL Server實例使用內置審覈(我相信CDC?)ASP.Net MVC項目的多個數據庫用戶SQL Server審計,或者滾動我們自己的?

我們也有我們ASP.Net應用程序設置使用在web.config中爲整個應用程序,無論是誰在(約50〜用戶)

問題登錄指定一個連接字符串:我們希望能夠審計信息中包含的發生特定變更的用戶的用戶名。

看起來,我們只能這樣做,在以下兩種方法之一:

  1. 更改我們的應用程序設置,使每一個用戶得到自己的數據庫登錄。這將要求我們使用動態連接字符串(可能不太可怕),但此外它會添加一個新用戶到系統中,並且管理員不能再通過應用程序的接口自動執行它(我認爲)。
  2. 使用ASP.Net應用程序本身內的其他解決方案。這可以讓我們在應用程序中輕鬆地添加任何信息,但會涉及到廢棄整個內置解決方案,基本上是從頭開始,並付出巨大的努力。

有人必須在審計之前遇到這個問題 - 是否可行?或者#2是我們能夠到這裏的唯一途徑?

感謝

+0

我想使用Windows登錄是不可能的? – podiluska

+0

是的。儘管感謝您的輸入。 – Whisker

回答

1

選項#1是爲管理員痛苦,因爲「動態」連接字符串,並調用sp_addlogin將創建用戶有點複雜的代碼。但最壞的情況是,每個用戶的單獨數據庫登錄也允許他們直接查詢數據庫(如果他們知道數據庫名稱的實例&,這些數據庫名稱可能以任何方式泄露給他們並通過網絡「查看」數據庫服務器)。直接訪問數據庫可能會導致每個應用程序崩潰。不要這樣做,除非您確定數據庫服務器無法直接與用戶聯繫。

關於#2。如何在每個表中添加「LastModifiedLogin」列,在每次插入/更新期間,您都將登錄用戶的登錄名添加進去?這不應該使CDC崩潰,你得到了你想要的。然而,審計刪除幾乎沒有問題,因爲您發出語句並且不再有可放置登錄名的行。您可以組織單獨的「DeleteAudit」表,您在每次刪除時都放置表名,行標識符和用戶登錄名,但這只是一個粗略的想法。

如果您使用NHibernate進行數據訪問,我建議您考慮將CDC切換到NHibernate Envers,這是非常整潔的解決方案。

相關問題