最近,我将生产SQL实例从2005年的SP4升级到了2012年的SP2,并注意到system_health扩展事件中的大量条目:

我一直在研究这个问题,并发现了以下相关的文章/问题:
服务器2012:安全性_错误_环_缓冲器_记录: ImpersonateSecurityContext
但是,这表明问题与登录失败有关。我检查了SQL错误日志,没有记录失败的登录。
我一直在开发实例上研究这个问题,并注意到只要SQL身份验证的登录名连接到SQL实例,就会生成条目。
以前有人遇到过这种情况吗?我想弄清楚为什么这些条目会被记录下来。
如果有人希望看到自己的(开发)实例发生这种情况,请使用SQL身份验证的登录到SQL中,然后运行:-
SELECT
CONVERT (VARCHAR(30), GETDATE(), 121) as runtime,
DATEADD (ms, (a.[Record Time] - sys.ms_ticks), GETDATE()) as [Notification_Time],
a.* , sys.ms_ticks AS [Current Time]
FROM
(SELECT
x.value('(//Record/Error/ErrorCode)[1]', 'varchar(30)') AS [ErrorCode],
x.value('(//Record/Error/CallingAPIName)[1]', 'varchar(255)') AS [CallingAPIName],
x.value('(//Record/Error/APIName)[1]', 'varchar(255)') AS [APIName],
x.value('(//Record/Error/SPID)[1]', 'int') AS [SPID],
x.value('(//Record/@id)[1]', 'bigint') AS [Record Id],
x.value('(//Record/@type)[1]', 'varchar(30)') AS [Type],
x.value('(//Record/@time)[1]', 'bigint') AS [Record Time]
FROM (SELECT CAST (record as xml)
FROM sys.dm_os_ring_buffers
WHERE ring_buffer_type = 'RING_BUFFER_SECURITY_ERROR') AS R(x)) a
CROSS JOIN sys.dm_os_sys_info sys
ORDER BY a.[Record Time] DESC您应该看到与登录时间相对应的条目。
如果有人能复制我所看到的,那就太好了。
谢谢,
安德鲁
发布于 2014-10-31 16:33:09
根据我的理解,这只是一个你可以忽略的噪音。
此事件是sqlserver.security_error_ring_buffer_recorded事件的一部分。这是详细的日志记录,告诉您如何处理安全错误(例如,失败的登录),以确保它们不会丢失。
API ImpersonateSecurityContext(由SSPI提供)允许服务器模拟客户机的安全上下文--意思是:服务器可以对客户端进行身份验证,并使用客户机的安全上下文进行本地访问检查,或者将上下文传递给同一台机器上的另一台服务器。
我会安全地忽略这些。
顺便说一下,我可以在SQL Server 2012 + RTM + (Build11.0.2100.60)上看到相同的输出

https://dba.stackexchange.com/questions/81585
复制相似问题