对于远程连接,SQL Server 2016中登录事件中记录的客户端IP为NULL

问题描述 投票:1回答:1

我有一个本地SQL Server 2016,我想审核对其执行的操作。我收到了sqlaudit日志和extended events logging,但是它们都不记录连接到数据库的远程客户端的IP。

[我试图创建一个触发器,使用this guide将该数据插入到我创建的表中,并提出了这个条件:

CREATE TABLE login_log_database (PostTime datetime, DB_User nvarchar(100), Event nvarchar(100), ClientHost nvarchar(2000));  
GO 

CREATE TRIGGER log   
ON all server
FOR LOGON   
AS  
DECLARE @data XML  
SET @data = EVENTDATA()  
INSERT login_log   
   VALUES   
   (GETDATE(),   
   CONVERT(nvarchar(100), CURRENT_USER),   
   @data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'),   
   @data.value('(/EVENT_INSTANCE/ClientHost)[1]', 'nvarchar(2000)') ) ;  
GO  

但是当我从通用JDBC客户端(特别是DBeaver)连接到数据库时,表中的事件字段和ClientHost的条目为“ NULL”。从计算机本身上的SSMS本地连接,事件字段是LOGON,客户端主机是“本地计算机”。

我以某种方式从XML读取值时做错了吗?

sql-server audit
1个回答
0
投票

您可以使用CONNECTIONPROPERTY('client_net_address')来捕获客户端的IP地址。

caveat:当客户端通过共享内存或命名管道连接时,client_net_address不返回ip。

对于共享内存[返回C0]

对于命名管道<local machine>返回

<named pipe>
© www.soinside.com 2019 - 2024. All rights reserved.