0

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

4

3 回答 3

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 帐户下运行。这不是向您的系统添加审核的方法。前面提到的文章也可以为您提供一些关于实施审计的更好方法的指导。

于 2014-11-25T13:35:27.343 回答
1

您的解决方案应该捕获“更改者”或“插入者”记录的用户名,并将其保存到捕获实例本身的基础数据表主题。这样,您的 CDC 实例也会为您捕获记录的用户名。

如前所述,您永远不要更改系统生成的表,原因有两个: 1. 当它们因任何原因恢复时,您的更改将丢失 2. 更改系统表会给您带来意想不到的后果。

希望这可能会有所帮助。

于 2015-09-08T19:54:17.053 回答
0

而不是更改 CDC 表更改基表(默认值设置的主源表 DEFAULT(SUSER_SNAME()))COLUMN 您将获得删除或插入和更新的用户

于 2020-05-05T21:10:27.030 回答