2014-04-23 35 views
1

我正在尋找一個審計解決方案,確切地做了更改數據捕獲(CDC)的工作,除了我需要它也跟蹤進行更改的應用程序用戶。我目前正在使用SQL Server 2012 Enterprise,並可能在今年晚些時候升級到2014年。SQL Server審計替代方案與應用程序用戶跟蹤

我們已經有一個利用Delete,Insert和Update觸發器的審計解決方案,但是一些新的需求可能會迫使我們更新每個審計觸發器和相應的審計表。鑑於多年來我們針對該解決方案遇到的各種問題,這似乎與任何重新評估和潛在替代解決方案一樣好。

爲了讓您瞭解我目前正在使用哪些內容(並且可以利用這些內容),我們使用存儲過程(ConnectionInitialize)在表中存儲具有SPID的用戶標識(ApplicationUser),然後我們在完成刪除,插入和更新後,使用另一個存儲過程(ConnectionReset)刪除行。

我們是否使用CDC,我研究了添加一個類似於cdc.lsn_time_mapping表的觸發器,但是我找不到一種方法將LSN映射回SPID(因此是用戶ID)正在使用。這也表明CDC總是稍微落後一些其他問題。

我看了一下SQL Server Audit,但是這提出了一些自己的挑戰。我們使用透明數據加密(TDE)來安撫我們的一些安全需求,但是SQL Server Audit看起來需要單獨的加密策略;而且我對列更感興趣,而不是實際的SQL語句。即使如此,這些對我來說也不是交易破壞者,所以我仍在研究它。

鑑於我試圖完成的任何人有任何反饋或建議?

+2

你有沒有嘗試過使用觸發器和CDC在一起。在表格中放置一列,並在存在改變時使用觸發器存儲SPID,然後使用CDC檢索到底是誰做了什麼。 –

+0

這與我們現有的審計有些類似,我們目前在所有表中都有70多個觸發器來執行此操作。我們需要改變我們所有的表格和所有這些觸發器來獲得這個特定的解決方案。雖然可行,不太可能。我希望有一站式的解決方案,但看起來好像不太可能!我們曾想過使用CDC的事務ID和應用程序ID的映射表,任何人試過這個? – Wade

回答

1

CDC本身不符合要求。原因在於CDC只會抓取您的數據的更改,而不是根據這些更改進行的任何基礎上下文。但是,如果您願意使用某些審覈列標記您的數據,您可以獲得所需的信息。基本的想法是你在你的表中添加一列(或者如果你不能修改實際的表,不管出於什麼原因)並且填寫上次修改記錄的用戶(通過非常簡單的方式一個插入/更新觸發器)。一旦這是實際的數據,你可以使用它,但你需要(CDC是一種可能的機制)。

+0

此解決方案是否也處理審覈刪除? – Wade

+1

如果您選擇「邊桌」解決方案,它將僅處理刪除操作,因爲您不能標記數據以及刪除的數據,因爲它將消失。 :) –

1

遲到的答案,但希望有用。

有一個第三方工具,ApexSQL Audit,能夠滿足您的要求。我以前的公司正在使用它多年,他們對此感到滿意。

有一個有幫助的comparison article您可以閱讀以查找有關審覈數據,審覈機制,完整性保護等方面的更多細節,以供CDC &審覈工具在一個地方使用。