Rit*_*kre 12 sql-server audit sql-server-2012 change-data-capture
我目前正在使用更改数据捕获 (CDC)来跟踪数据更改,并且我希望跟踪提交进行更改的查询的客户端的主机名和 IP 地址。如果有 5 个不同的客户端通过相同的用户名登录,一个人面临着跟踪这 5 个中哪一个触发了查询的难题。我发现的其他似是而非的解决方案包括使用以下命令更改 CDC 表:
ALTER TABLE cdc.schema_table_CT
ADD HostName nvarchar(50) NULL DEFAULT(HOST_NAME())
Run Code Online (Sandbox Code Playgroud)
但是,这将返回触发查询的服务器的主机名,而不是触发查询的客户端的主机名。
有没有办法解决这个问题?有助于记录客户端的主机名或 IP 地址(或某种其他类型的唯一身份)的东西。我不想使用触发器,因为它会减慢系统速度,而且 CDC 还会生成系统表,因此显然不可能使用触发器。
我不确定 CDC,但如果登录,view server state permission您可以使用 DMV 获取一些信息。
这在此处的联机丛书中给出。我更改了查询以添加列,这将为您提供IP address:
SELECT
c.session_id, c.net_transport, c.encrypt_option, c.auth_scheme,
s.host_name, s.program_name, s.client_interface_name,
c.local_net_address, c.client_net_address, s.login_name, s.nt_domain,
s.nt_user_name, s.original_login_name, c.connect_time, s.login_time
FROM sys.dm_exec_connections AS c
JOIN sys.dm_exec_sessions AS s
ON c.session_id = s.session_id
WHERE c.session_id = SPID; --session ID you want to track
Run Code Online (Sandbox Code Playgroud)