SQL Server 2012 : Security_error_ring_buffer_recorded : ImpersonateSecurityContext


10

내가 관리하는 몇 대의 서버가 system_health XE 세션에서 많은 이벤트를 기록하고 있습니다.

error_code 5023은 ( 시스템 오류 코드 ) 여야합니다 .

ERROR_INVALID_STATE    5023 (0x139F)

The group or resource is not in the correct state to perform the requested operation.

이벤트 보안 로그 나 SQL Server 로그에 로그인 이벤트가 실패하지 않았습니다.


Microsoft 지원에 문의하거나 티켓을 열었습니까? 내부 오류처럼 보입니다.
Jon Seigel

인스턴스 및 OS 버전의 빌드 번호는 무엇입니까?

SP1이 포함 된 일반 SQL 2012 : 11.00.3000.00입니다. 설정에 오류가없는 것으로 확인되는 즉시 MS 고객 지원에 문의하고 싶습니다. 여기에 의견을 기대하고 ...
Jens W.

답변:


4

이 이벤트의 정의와 근본 원인을 찾고 있다고 가정하겠습니다.

에서 이용 방법 : SQL 서버 2005 SP2 보안 링 버퍼 - RING_BUFFER_SECURITY_ERROR ( 아카이브 ) :

SQL Server 2005 SP2 sys.dm_os_ring_buffers에는 다양한 보안 오류에 대한 새로운 링 버퍼 항목 ( )이 추가되었습니다 . 링 버퍼 항목이 추가 된 이유는 클라이언트가 로그인 실패 또는 기타 오류를 수신 한 이유에 대한 자세한 정보를 DBA에 제공하기위한 것입니다.

이벤트 로그 나 오류 로그에 로그인 항목이 실패하지 않았 음을 나타냅니다. 대신이 링 버퍼를 직접 쿼리 할 수 ​​있습니다.

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] ASC

알림 시간은 근본 원인을 밝힐 수 있습니다.

항목의 날짜 / 시간이 다음과 유사한 오류 로그의 로그인 실패 항목과 일치한다는 것을 알 수 있습니다.

"사용자 '도메인 \ 사용자'에 대한 로그인 실패. 이유 : 인프라 오류로 인해 토큰 기반 서버 액세스 유효성 검증에 실패했습니다. 이전 오류를 확인하십시오. [CLIENT :] 오류 : 18456 심각도 : 14 상태 : 11"

특정 로그인 실패 오류 메시지 ( 아카이브 ) 문제 해결 에서 :

상태 11은 "유효한 로그인이지만 서버 액세스 실패" 에 해당합니다. 이는 로그인이 유효하지만 인스턴스에 대한 액세스 권한을 부여하는 특정 보안 권한이 없음을 나타냅니다.

  1. sys.server_principals의 출력을 확인하여 로그인이 SQL Server 로그인 중 하나에 직접 매핑되었는지 확인하십시오.
  2. 로그인이 SQL 인스턴스에서 사용 가능한 로그인 중 하나에 직접 맵핑 된 경우 로그인의 SID가 Windows 로그인의 SID와 일치하는지 확인하십시오.

누군가가 Windows / AD 수준에서 로그인을 삭제 한 후 다시 추가하면 SID SQL이 시스템 카탈로그에 저장된 SID SQL과 일치하지 않는 새 SID를 얻게되며 실패합니다.


1
문제는 새로운 서버, 모든 계정을 새로 만들고 로그인 할 수 있다는 것입니다. 그러나 수십 가지의 이러한 사건은 분명하고 영향을 미치지 않습니다. 가능한 빨리 링 버퍼를 읽으려고합니다.
Jens W.

3
AD 서버 이외의 서버에서도 이와 동일한 동작을 보았으며 로그인 실패 또는 기타 오류와 관련이 없습니다. 그것은 단지 보안 오류 링 버퍼에 로그인하고 system_health를 넘치며 그 이유는 없습니다.
Jonathan Kehayias 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.