为了捕获删除的用户名,我在CDC表中添加了一个新列(例如:- SQL )来设置记录的cdc.dbo_testCDC_CT用户名。即ALTER TABLE cdc.dbo_testCDC_CT ADD username VARCHAR(20) DEFAULT(SUSER_SNAME())。该列中的值始终是"sa",但我是以windows身份验证登录的。为什么会发生这种情况?
发布于 2014-11-25 21:35:27
首先,您不应该修改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帐户下运行。这不是将审计添加到系统中的方法。前面提到的文章也可以为您提供一些关于实现审计的更好方法的指导。
发布于 2015-09-09 03:54:17
您的解决方案应该捕获'Changed By‘或'Inserted By’记录的用户名,并将其持久化到捕获实例本身的底层数据表主题。通过这种方式,您的CDC实例还将为您捕获记录的用户名。
如前所述,您永远不应该更改系统生成的表,原因很简单: 1.由于任何原因恢复它们时,您所做的更改都将丢失。2.更改系统表可能会给您带来意想不到的后果。
希望这能有所帮助。
发布于 2020-05-06 05:10:27
您将获得删除、插入和更新的用户,而不是更改CDC表更改基表(缺省值集默认值的主源表(SUSER_SNAME()列
https://stackoverflow.com/questions/26624135
复制相似问题