确定针对表的查询的原始 IP 地址?

Abe*_*ler 4 sql-server sql-server-2012

我有一个正在由在未知位置运行的服务更新的表。

我已经检查了所有通常与我的数据库服务器通信的服务器,但它们似乎都没有运行相关服务。

我正在尝试追踪此服务的运行位置,我想知道是否可以查看影响特定表的查询来自何处?

这可能吗?

Aar*_*and 9

最简单的方法是使用触发器并从sys.dm_exec_connections. 你需要一个日志表;我已经猜到你会想要几列,但你可能想要其他的。

CREATE TABLE dbo.LoggingTable
(
    LoggingID INT NOT NULL
        CONSTRAINT PK_LoggingTable
        PRIMARY KEY CLUSTERED
        IDENTITY(1,1)
    , AppName SYSNAME
    , HostName SYSNAME
    , ClientNetAddress VARCHAR(255)
    , LogDateTime DATETIME
);
GO

CREATE TRIGGER dbo.triggername
ON dbo.tablename /* name of the target table  */
FOR INSERT, UPDATE, DELETE
AS
BEGIN
  INSERT dbo.LoggingTable(AppName, HostName, ClientNetAddress, LogDateTime) 
  SELECT app_name(), host_name(), client_net_address, SYSDATETIME()
  FROM sys.dm_exec_connections dec
  WHERE dec.session_id = @@SPID;
END
GO
Run Code Online (Sandbox Code Playgroud)

请注意,如果更新来自同一台机器上的连接(“呼叫来自屋内!”),并且使用共享内存,您将获得<local machine>IP 地址。

一旦你想通了,不要忘记放下扳机。

有关列的详细信息sys.dm_exec_connections