2014-04-23 34 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 &审核工具在一个地方使用。