다음을 통해 공유


SQL Server의 간헐적 또는 주기적 인증 문제

참고 항목

문제 해결을 시작하기 전에 전제조건을 확인하고 체크리스트를 검토하는 것이 좋습니다. 자세한 내용은 자가 진단 문서를 참조 하세요.

이 문서에서는 SQL Server 연결에서 일시적인 인증 문제의 일반적인 원인을 설명하고 솔루션을 제공합니다.

증상

사용자 또는 애플리케이션이 SQL Server 데이터베이스를 사용하여 인증하는 데 산발적으로 어려움을 겪을 때 SQL Server 연결에서 간헐적 또는 주기적인 인증 문제가 발생합니다. 이로 인해 데이터 액세스 및 애플리케이션 기능이 중단됩니다.

가장 일반적인 오류 메시지

  • SSPI 컨텍스트를 생성할 수 없습니다.

  • 사용자가 로그인하지 못했습니다.

    • 사용자 ''이(가) 로그인하지 못했습니다.
    • 사용자 'NT AUTHORITY\ANONYMOUS LOGON'이(가) 로그인하지 못했습니다.
    • 사용자 'UserName>'<에 대한 로그인 실패
    • 사용자 'Domain>\UserName>'<에< 대한 로그인 실패
    • 로그인이 실패했습니다. 로그인은 신뢰할 수 없는 도메인에서 온 것이며 Windows 인증 사용할 수 없습니다.

원인

가장 일반적인 문제는 SQL Server 성능 또는 느린 도메인 컨트롤러 응답으로 인해 발생합니다. NTLM(NT LAN Manager)을 사용하는 경우 LSASS(로컬 보안 기관 하위 시스템 서비스)에 병목 현상이 있으며 한 번에 처리할 수 있는 새 연결 수를 제한합니다. 다른 요청은 백업되며 시간이 초과될 수 있습니다. 바이러스 백신과 같은 일부 원인은 증명하기 어려울 수 있지만 여전히 일반적이며 다른 조사 방법이 효과가 없는 경우에도 하드 증거없이 조사해야합니다.

문제 해결 프로세스

이 문제는 간헐적이므로 Kerberos SPN(서비스 사용자 이름)과 같은 구성이 올바르기 때문일 수 있습니다. 이 문제를 해결하려면 다음 문제 해결 단계를 수행합니다.

여러 도메인 또는 데이터 센터 간의 대기 시간 차이

여러 도메인 또는 데이터 센터가 관련된 경우 다른 도메인 또는 데이터 센터의 사용자가 수행하는 동안 로컬 도메인 또는 데이터 센터의 사용자가 문제를 경험하지 않는지 확인합니다. 이 경우 데이터 센터 또는 도메인 컨트롤러 간의 통신 대기 시간을 나타낼 수 있습니다. 다음 명령을 사용하여 문제를 조사합니다.

  • 네트워크 대기 시간을 확인하려면 ping을 사용합니다. 예시:

    1. ping <DatabaseServer> 명령을 실행합니다.

    2. 시간 열을 확인하고 해당 시간을 다른 도메인 또는 데이터 센터의 시간 열과 비교합니다.

      Pinging <DatabaseServer> [10.10.10.3] with 32 bytes of data:
      Reply from 10.10.10.3: bytes=32 time=68ms TTL=116
      Reply from 10.10.10.3: bytes=32 time=67ms TTL=116
      Reply from 10.10.10.3: bytes=32 time=67ms TTL=116
      
  • 자격 증명 유효성 검사 대기 시간 문제를 테스트하려면 다양한 사용자와 함께 Runas를 사용합니다. 예시:

    1. runas /user:<DomainName>\<UserAccountName> cmd.exe를 실행합니다.
    2. 명령 프롬프트가 표시되면 사용자의 암호를 입력합니다.

이러한 명령을 사용하여 테스트한 후에도 문제가 지속되면 SQL Server가 아니라 네트워크 인프라 또는 도메인 컨트롤러 성능 문제가 발생합니다.

SQL Server 오류 로그에서 성능 문제 찾기

SQL Server 오류 로그는 15초보다 오래 걸리는 I/O를 나타내는 항목과 같은 SQL Server의 성능 문제를 표시할 수 있습니다. SQL 성능 팀에는 실행 및 분석할 PSSDIAG 가 있습니다. 네트워크 추적에 SQL Server 응답의 지연이 표시되는 경우 이 작업을 수행해야 할 수 있습니다.

오류 로그에는 일부 Active Directory 성능 문제를 나타내는 다음 오류 로그와 같은 다른 도메인 관련 오류도 포함될 수 있습니다.

SSPI handshake failed with error code 0x80090311 while establishing a connection with integrated security; the connection has been closed.
SSPI handshake failed with error code 0x80090304 while establishing a connection with integrated security; the connection has been closed.

다음 운영 체제 오류 코드는 오류의 원인을 나타냅니다.

  • 오류 -2146893039(0x80090311): 인증을 위해 연락할 수 있는 권한이 없습니다.

  • 오류 -2146893052(0x80090304): 로컬 보안 기관에 연결할 수 없습니다.

네트워크 오류에 대한 클라이언트 시스템의 이벤트 로그 검토

시스템 이벤트 로그에는 Kerberos, LSA(로컬 보안 기관) 및 Netlogon 이벤트와 같은 다양한 이벤트가 있습니다. 이러한 이벤트는 컴퓨터가 일정 시간 동안 도메인 컨트롤러에 연결할 수 없음을 나타냅니다. 쉽게 찾을 수 있도록 오류, 경고위험 이벤트만 필터링합니다. 이벤트 시간은 가동 중단 시간 전후여야 합니다. 일치하는 항목이 있는 경우 Active Directory 문제일 수 있습니다.

경우에 따라 SQL Server에서 이 문제가 발생할 수 있습니다. 해당 컴퓨터의 로그도 확인합니다.

Source: NETLOGON
Date: <DateTime>
Event ID: 5719
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: SQLPROD01
Description:
This computer was not able to set up a secure session with a ___domain controller in ___domain CONTOSO due to the following: The remote procedure call was cancelled. This may lead to authentication problems. Make sure that this computer is connected to the network. If the problem persists, please contact your ___domain administrator.

보안 이벤트 로그에서 이벤트 ID 4625를 필터링 합니다. 이 이벤트는 로그인 실패에 대한 자세한 정보를 표시합니다.

SQL 연결 링 버퍼 수집 및 검토

링 버퍼는 SQL Server의 연결 이벤트의 기록 로그입니다. 즉, 가동 중단 후에 수행할 수 있습니다. 많은 이벤트에는 시간이 소요되는 위치를 알려주는 로그인 타이머가 포함됩니다.

  • 네트워크에서 소요된 시간은 가능한 네트워크 또는 클라이언트 대기 시간을 나타냅니다.
  • SSL(Secure Sockets Layer) 또는 SSPI(보안 지원 공급자 인터페이스) API에 소요된 시간은 Windows 보안 하위 시스템의 잠재적인 문제를 나타냅니다.
  • 큐에 삽입된 시간은 SQL Server 성능 문제를 나타냅니다.

자세한 내용은 연결 링 버퍼 수집을 참조하세요.

연결 풀링

연결 풀링부족하면 간헐적인 로그인 오류가 발생할 수 있습니다.

참고 항목

연결 풀링이 부족하면 설정된 연결에 비해 출력에 NETSTAT 많은 수의 TIME_WAIT 상태 코드가 표시됩니다.

연결 풀링을 사용하도록 설정하지 않으면 클라이언트가 아웃바운드 포트가 부족하고 서버도 오버로드할 수 있습니다. 이 오버로드로 인해 서버가 들어오는 연결 요청을 거부하거나 성능이 저하된 도메인 컨트롤러를 오버로드할 수 있습니다.

가장 좋은 방법은 애플리케이션 개발자가 애플리케이션에서 연결 풀링을 사용하도록 하는 것입니다. 연결 풀링이 기본적으로 .NET 및 IIS(인터넷 정보 서비스) 애플리케이션에서 ON이지만 어떤 이유로 인해 해제되었을 수 있습니다.

애플리케이션에서 사용자 지정 풀링 코드를 사용하는 것이 좋습니다. 발생한 거의 모든 사용자 지정 풀링 구현에 문제가 있습니다. 기본 제공 연결 풀링 메커니즘을 사용하는 것이 좋습니다.

임시 포트가 부족한 것은 간헐적인 연결 시간 제한의 비교적 일반적인 원인입니다.

문제: SQL Server 컴퓨터의 낮은 커널 메모리입니다.

해결 방법: SQL Server Management Studio의 속성 창에서 최대 서버 메모리(MB)를 조정합니다. 최대 서버 메모리(MB)를 컴퓨터의 실제 메모리보다 약 4GB에서 8GB로 설정하는 것이 가장 좋습니다. 컴퓨터에서 실행 중인 여러 인스턴스, IIS 또는 다른 애플리케이션 서버가 있는 경우 이 값은 더 작아야 합니다. 최대 서버 메모리(MB) 설정에 대한 권장 사항은 서버 메모리 구성 옵션을 참조하세요.

참고 항목

기본값은 2147483647 MB서버에서 운영 체제(OS)의 메모리가 부족해질 수 있다는 것을 의미합니다.