在我的 SQL Server 2016 服务器中,我设置了一个用户登录审核登录成功和登录失败操作。这是脚本。
USE [master]
GO
CREATE SERVER AUDIT SPECIFICATION [ServerAuditSpecification-20190404-091348]
FOR SERVER AUDIT [Audit_SQL_Logins]
ADD (FAILED_LOGIN_GROUP),
ADD (SUCCESSFUL_LOGIN_GROUP)
WITH (STATE = ON)
GO
USE [master]
GO
CREATE SERVER AUDIT [Audit_SQL_Logins]
TO FILE
( FILEPATH = N'D:\SQL_Logins_Audit\'
,MAXSIZE = 20 MB
,MAX_FILES = 50
,RESERVE_DISK_SPACE = OFF
)
WITH
( QUEUE_DELAY = 1000
,ON_FAILURE = CONTINUE
,AUDIT_GUID = '77795756-1928-4ce4-85f5-e3ad2e3e22e5'
)
WHERE ([server_principal_name]<>'name1' AND [server_principal_name]<>'name2' AND ([server_principal_name]<>'name3' AND [server_principal_name]<>'name4') AND ([server_principal_name]<>'name5' AND [server_principal_name]<>'name6'))
ALTER SERVER AUDIT [Audit_SQL_Logins] WITH (STATE = ON)
GO
在审核日志中,
我可以看到很多失败,服务器主体 SID 为 NULL,名称为空字符串。早些时候,当我设置登录时,我没有提供任何过滤器,那时审计日志只显示成功,没有失败。
我不明白这里发生了什么失败,因为日志显示 NULL 。
这是屏幕截图。这是一个生产数据库服务器,用户从 .Net Web 应用程序登录。我看到消息“建立连接时发生网络错误代码;连接已关闭。”
我创建了完全相同的审核,但无法重现您描述的问题。当我使用实际不存在的登录名登录时:
对于故意错误的密码:
我什至尝试了一个包含大量前导空格和制表符的名称,只是为了看看该名称是否会被截断并看起来是空白的,但前导空格会被修剪掉。
当然,我希望 SID 在第一种情况下为空,因为您希望为不存在的登录显示什么 SID(因此不能有 SID)?对于第二种情况,可能是因为登录无法验证,所以没有匹配到 SID?
您必须提供更多信息来确定未填充服务器主体名称的原因。应用程序名称是什么?声明说了什么?什么是客户端(语句中的 IP 地址)?你能问那个人他们在做什么吗?