使用CDC进行数据捕获



为了捕获已删除的用户名,我在CDC表中添加了一个新列(例如:-CDC.dbo_testCDC_CT)来设置记录的SQL用户名。即;ALTER TABLE cdc.dbo_testCDC_CT添加用户名VARCHAR(20)DEFAULT(SUSER_SNAME()))。该列中的值总是"sa",但我以windows身份验证的身份登录。为什么会这样?

首先,您不应该修改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帐户下运行。这不是将审核添加到系统中的方法。前面提到的文章也可以为您提供一些实现审计的更好方法。

您的解决方案应该捕获"Changed By"或"Inserted By"记录的用户名,并将其持久化到捕获实例本身的底层数据表主题中。这样,您的CDC实例也将为您捕获记录的用户名。

如前所述,您永远不应该更改系统生成的表,原因很简单:1.当它们因任何原因被恢复时,您的更改将丢失2.更改系统表可能会带来意想不到的后果。

希望这能有所帮助。

您将得到删除、插入和更新的用户,而不是更改CDC表更改基表(默认值集default(SUSER_SNAME())的主源表)COLUMN

最新更新