2014-10-29 102 views
0

要捕获已删除的用户名,我在我的CDC表中添加了一个新列(例如: - cdc.dbo_testCDC_CT)以设置记录的SQL用户名。 ie; ALTER TABLE cdc.dbo_testCDC_CT ADD username VARCHAR(20)DEFAULT(SUSER_SNAME()))。 该列中的值总是“sa”,但我被记录为Windows身份验证。为什么这个哈皮?使用CDC捕获数据

回答

1

首先,你不应该修改由cdc生成的系统表。此表是在您的dbo.testCDC表上启用cdc时生成的,并且将包含源表的列,以及另外5列,其含义如下所述:http://msdn.microsoft.com/en-us/library/bb500305(v=sql.110).aspx。当您禁用表格中的cdc时,它将被自动删除。

我建议先阅读cdc和预期的使用模式。良好的开端可能是这篇文章: http://technet.microsoft.com/en-us/magazine/2008.11.sql.aspx

要回答你的问题,为什么SA总是分配给您的列:在* _CT表中的所有行通过日志读取器过程,发生在sa帐户下运行填写你的情况。这不是将审计添加到您的系统的方式。前面提到的文章可以为您提供一些更好的实施审计方法的指南。

+0

@Sreepathi,请使用标记作为答案按钮来奖励花时间回答您的问题的人。 – rrozema 2017-10-20 11:07:46

1

您的解决方案应该捕获'Changed By'或'Inserted By'记录的用户名并将其保存到捕获实例本身的基础数据表主题中。通过这种方式,您的CDC实例也将为您捕获记录的用户名。

前面已经提到的,你应该永远不变的系统生成的表,两个简单的原因:1。 当他们恢复因任何原因,您的更改将丢失 2.更改系统表可以为您提供相当意想不到的后果。

希望这可能有助于。