사용자가 TCP/IP 프로토콜을 사용하여 SQL Server 원격으로 연결하지 못할 수 있습니다.

이 문서는 TCP/IP 프로토콜을 사용하여 SQL Server 원격으로 연결할 수 없는 문제를 resolve 데 도움이 됩니다.

원래 제품 버전: SQL Server
원래 KB 번호: 2018930

증상

Microsoft SQL Server 사용하는 경우 다음 증상 중 하나 이상이 나타날 수 있습니다.

  • CONTROL SERVER 권한이 있는 사용자(예: syadmin 고정 서버 역할의 멤버)만 TCP/IP를 통해 연결할 수 있습니다. 이 권한이 없는 사용자는 Windows 또는 SQL Server 인증을 사용하여 TCP/IP 프로토콜을 통해 원격으로 연결할 수 없습니다.

    참고

    관리자 권한 사용자 연결은 sys.dm_exec_sessions(Transact-SQL) DMV(동적 관리 뷰)에만 표시되지만 sys.dm_exec_connections(Transact-SQL) 보기에는 표시되지 않습니다.

  • 명명된 파이프 프로토콜을 사용하는 로컬 및 원격 연결과 공유 메모리 프로토콜을 사용하는 로컬 연결은 계속 제대로 작동합니다.

또한 다음 메시지는 SQL Server Errorlog 파일에 기록됩니다.

  • SQL Server 시작 시:

    오류: 26023, 심각도: 16, 상태: 1.
    서버 TCP 공급자가 ['any'ipv6< 1963> ]에서 수신 대기하지 못했습니다. Tcp 포트가 이미 사용 중입니다.
    오류: 9692, 심각도: 16, 상태: 1.
    Service Broker 프로토콜 전송은 다른 프로세스에서 사용 중이므로 포트 1963에서 수신 대기할 수 없습니다.

  • 실패한 로그인의 경우:

    SQL Server 2008 이상 버전:

    오류: 18456, 심각도: 14, 상태: 11.
    사용자 'MyDomain\TestAcc'에 로그인하지 못했습니다. 이유: 인프라 오류로 인해 토큰 기반 서버 액세스 유효성 검사가 실패했습니다. 이전 오류를 확인합니다.

원인

이 오류는 SQL Server instance 사용하도록 구성된 것과 동일한 포트를 사용하여 Service Broker에 대한 TCP 엔드포인트를 구성할 때 발생합니다. 다음 쿼리를 실행하여 엔드포인트 목록을 가져올 수 있습니다.

SELECT * FROM sys.tcp_endpoints

참고

sys.tcp_endpoints 온라인 설명서 항목(Transact-SQL)에 설명된 대로 이 보기에는 SQL Server instance 현재 사용하도록 구성된 포트 및 프로토콜에 대한 정보가 포함되어 있지 않습니다. 해당 정보를 찾으려면 SQL Server 구성 관리자 참조하세요.

해결 방법

  • 방법 1: DROP ENDPOINT(Transact-SQL) 명령을 사용하여 문제를 일으키는 엔드포인트를 삭제합니다.

    예를 들어 라는 TestEP 엔드포인트를 삭제하려면 다음 명령을 사용할 수 있습니다.

    DROP ENDPOINT TestEP
    
  • 방법 2: ALTER ENDPOINT(Transact-SQL) 명령을 사용하여 다른 포트를 사용하도록 엔드포인트를 변경합니다.

    예를 들어 라는 TestEP 엔드포인트를 변경하여 다른 포트를 사용하려면 다음 명령을 사용할 수 있습니다.

    ALTER ENDPOINT TestEP as tcp (listener_port=1980)
    

추가 정보

데이터베이스 미러링을 위해 만든 것과 같은 다른 TCP 엔드포인트에서도 비슷한 문제가 발생할 수 있으며 SQL Server 시작 시 오류 메시지가 그에 따라 변경됩니다.