다음을 통해 공유


네트워크 프로토콜 및 TDS 끝점

SQL Server 데이터베이스 엔진에서 응용 프로그램과 통신할 때는 TDS(Tabular Data Stream) 패킷이라는 Microsoft 통신 형식으로 통신을 설정합니다. SQL Server 2000과 MDAC(Microsoft Data Access Components)의 네트워크 라이브러리를 대체하는 네트워크 SNI(SQL Server Network Interface) 프로토콜 계층은 TCP/IP 또는 명명된 파이프와 같은 표준 통신 프로토콜 내의 TDS 패킷을 캡슐화합니다. SNI 프로토콜 계층은 데이터베이스 엔진 및 SQL Server Native Client 둘 모두에서 공통적으로 사용됩니다. SNI 프로토콜 계층을 직접 구성하는 대신 서버 및 SQL Server Native Client는 네트워크 프로토콜을 사용하도록 구성됩니다. 그리고 나서 데이터베이스 엔진 및 SQL Server Native Client는 자동으로 적절한 프로토콜 설정을 사용합니다. 서버에서는 네트워크 프로토콜마다 TDS 끝점이라는 SQL Server 개체를 만듭니다. 서버에서 TDS 끝점은 SQL Server에 의해 SQL Server 설치 중에 설치됩니다.

이 항목에서는 서버에서 TDS 끝점을 만들고 사용하는 방법을 설명합니다. 서버 구성 방법은 서버 네트워크 프로토콜 및 네트워크 라이브러리 구성을 참조하십시오.

클라이언트 컴퓨터에 SQL Server Native Client를 설치하고 서버에 설정되어 있는 네트워크 프로토콜을 사용하도록 구성해야 합니다. 클라이언트에 대한 자세한 내용은 클라이언트 네트워크 프로토콜 구성을 참조하십시오.

설치 후 서버 프로토콜 설정

기본 운영 체제 네트워크 프로토콜(예: TCP/IP)이 클라이언트 및 서버에 이미 설치되어 있어야 합니다. 네트워크 프로토콜은 일반적으로 Windows를 설치하는 동안 설치되며 SQL Server 설치 시 함께 설치되지 않습니다. 필요한 네트워크 프로토콜이 서버에 구성되어 있지 않고 사용할 수 없으면 데이터베이스 엔진이 시작되지 않습니다. 필요한 네트워크 프로토콜이 클라이언트에 구성되어 있지 않고 사용할 수 없으면 네트워크 라이브러리가 작동하지 않습니다.

[!참고]

이 항목의 나머지 부분에서 "프로토콜 활성화"는 운영 체제가 아닌 SQL Server에 대해 프로토콜을 활성화한다는 의미입니다.

다른 컴퓨터에서 SQL Server와 통신하는 데 필요한 네트워크 프로토콜은 설치 중 SQL Server용으로 활성화되어 있지 않은 경우가 많습니다. 따라서 클라이언트 컴퓨터에서 연결하려면 TCP/IP, 명명된 파이프 또는 VIA 프로토콜을 설정해야 합니다. 공유 메모리 프로토콜은 기본적으로 모든 설치 시 활성화되지만 같은 컴퓨터의 클라이언트 응용 프로그램에서 데이터베이스 엔진으로 연결하는 데만 사용할 수 있습니다. 설치 유형에 따라 활성화할 네트워크 프로토콜에 대한 자세한 내용은 기본 SQL Server 네트워크 구성을 참조하십시오.

네트워크 프로토콜을 사용하려면 SQL Server 구성 관리자를 사용합니다. 아니면 명령 프롬프트에서 옵션을 사용하여 설치 중 프로토콜을 활성화할 수도 있습니다. 자세한 내용은 방법: 명령 프롬프트에서 SQL Server 2008 R2 설치를 참조하십시오.

네트워크 연결을 설치 및 구성하고 나면 SQL Server는 서버 네트워크 프로토콜의 모든 조합을 동시에 수신할 수 있습니다.

정의된 TDS 끝점

TDS 끝점은 SQL Server 개체로서 SQL Server와 클라이언트 간 통신 지점을 나타냅니다. SQL Server는 SQL Server에서 지원하는 4개 프로토콜에 대해 각각 자동으로 끝점을 만듭니다. 기본적으로 모든 사용자에게는 프로토콜이 활성화될 때 해당 프로토콜에 액세스할 권한이 있습니다. 네트워크 프로토콜이 활성화되지 않은 경우에는 끝점이 존재하기는 해도 사용할 수 없습니다. DAC(관리자 전용 연결)에 추가 끝점이 생성되는데 이는 sysadmin 고정 서버 역할의 멤버만 사용할 수 있습니다.

SQL Server에서는 각 TDS 끝점에 대해 고유한 이름을 생성합니다. 자동으로 생성되는 끝점 목록은 다음 표와 같습니다.

용도

끝점 이름

공유 메모리

TSQL LocalMachine

명명된 파이프

TSQL 명명된 파이프

TCP/IP

TSQL 기본 TCP

VIA

TSQL 기본 VIA

DAC

관리자 전용 연결

HTTP

HyperText Transport Protocol

명명된 파이프 및 공유 메모리 프로토콜의 경우 인스턴스마다 끝점이 하나씩만 있을 수 있습니다. 이러한 프로토콜 유형에는 구성할 수 있는 끝점이 없습니다. TCP/IP 및 VIA의 경우에는 기본 끝점이 있지만 추가 끝점을 만들 수 있습니다. HTTP 끝점도 사용자가 만들 수 있으며 SQL Server 구성 관리자에 표시되지 않습니다.

중요 정보중요

VIA 프로토콜은 더 이상 사용되지 않습니다. Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 응용 프로그램은 수정하십시오.

시스템 끝점에 대해서는 ALTER ENDPOINT를 사용하여 소유자와 상태만 변경할 수 있습니다. 기본 끝점을 비활성화할 수는 없지만 중지하고 시작할 수 있습니다. 중지된 끝점은 계속 수신은 하지만 새 연결을 거부하고 닫습니다.

[!참고]

기본적으로 클라이언트는 프로토콜 중 하나가 작동할 때까지 모든 프로토콜을 시도하도록 구성되어 있습니다. TCP/IP 프로토콜이 비활성화된 경우에는 클라이언트가 다음 프로토콜로 계속 진행합니다. TCP/IP가 활성화되어 있지만 끝점이 중지되어 있는 경우 연결 시도가 거부되지 않으므로 클라이언트에서 다른 프로토콜을 시도하지는 않지만 중지된 연결은 사용할 수 없습니다. 이 경우 활성 끝점에 명시적으로 연결해야 합니다.

동적 TCP 포트는 일반적으로 기본 TCP 끝점에 연결됩니다.

레지스트리에서 프로토콜 설정

TDS 끝점에 대한 설정은 레지스트리에 기록됩니다. 사용자는 Transact-SQL 문을 사용하여 끝점을 만들거나 변경해야 하고, SQL Server 구성 관리자를 사용하여 프로토콜을 활성화 또는 비활성화하여 끝점을 시작하거나 중지해야 합니다.

사용자가 레지스트리의 프로토콜 설정을 변경할 때는 아무 일도 발생하지 않습니다. 레지스트리는 메타데이터와 구별됩니다.

사용자 연결을 끝점에 연관

데이터베이스 엔진으로 연결할 때 SQL Server는 해당 연결을 특정 끝점에 연관시키고 연결 로그인에 끝점을 사용할 권한이 있는지 평가합니다. 연결은 다음과 같이 연관됩니다.

  • 공유 메모리 연결에서는 TSQL LocalMachine 끝점을 사용합니다.

  • 명명된 파이프 연결에서는 TSQL 명명된 파이프 끝점을 사용합니다.

  • 관리자 전용 연결에서는 관리자 전용 연결 끝점을 사용합니다.

  • 기본적으로 TCP 연결은 TSQL 기본 TCP 끝점을 사용합니다. 특정 TCP 포트에 대해 새(사용자 정의) TCP 끝점이 생성되는 경우 해당 TCP 포트에 대한 연결은 새 끝점으로 연결됩니다. 포트로서 IP_ANY를 사용하여 새 TCP/TSQL 끝점을 만드는 경우 TCP 연결은 이 새 끝점으로 연결됩니다.

  • VIA 연결은 TCP 연결과 같이 처리됩니다.

사용자 정의 끝점은 기본 끝점과 같은 방법으로 작동합니다. 끝점이 하나의 IP 주소(또는 IP_ANY 사용 시에는 모든 IP 주소) 및 특정 TCP 포트에 대해 생성될 때 해당 끝점에 연결할 권한은 구축이라는 프로세스를 통해 사용자에게 제공됩니다. 서버가 실제로 IP 주소/TCP 포트 조합에서 수신하는지 여부에 관계없이 구축이 유지됩니다. IP 주소 및 TCP 포트에 대한 연결은 다음 순서로 끝점에 일치합니다.

  1. IP 주소 및 TCP 포트가 끝점의 IP 주소 및 TCP 포트에 정확히 일치하는 경우 해당 끝점이 사용됩니다.

  2. 정확히 일치하는 항목이 없으면 TCP 포트를 모든 IP_ANY 끝점에 대해 검사하고, TCP 포트가 나열되어 있는 경우에는 해당 끝점이 사용됩니다.

  3. 정확히 일치하는 포트가 없으면 기본 TCP 끝점이 사용됩니다.

연결 연관의 결과 항상 단일 끝점이 선택됩니다. 해당 끝점에 대해 연결 권한을 검사합니다. 사용자에게 끝점에 대한 권한이 없으면 프로세스에서 다음 끝점을 검색하지 않습니다.

예: 사용자 연결 및 끝점 연관

다음 예에서는 IP 주소 및 TCP 포트를 사용하여 끝점을 선택하는 방법을 보여 줍니다. 서버가 다음 IP 주소 및 TCP 포트에서 수신하도록 구성되어 있다고 가정할 수 있습니다.

127.0.0.1:1533

또한 다음 TCP 끝점이 설정되어 있다고 가정해 볼 수 있습니다.

끝점 이름

구성 값

루프백

LISTENER_IP= 127.0.0.1 및 LISTENER_PORT = 1533

원격

LISTENER_IP = ALL 및 LISTENER_PORT = 1533

TSQL 기본 TCP

어떤 IP 주소 또는 포트에도 링크되지 않음

다음과 같은 세 가지 연결이 가능합니다.

  • 클라이언트에서 127.0.0.1:1533에 TCP 연결을 만들 경우 해당 세션에 연결된 끝점은 루프백 끝점이 되는데, 이는 루프백 끝점에 정확히 일치하는 IP 주소 및 TCP 포트가 있기 때문입니다.

  • 클라이언트에서 251.40.20.151:1533에 TCP 연결을 만들 경우 끝점에 정확히 일치하는 IP 주소 및 TCP 포트가 없지만 연결에 대해 원격을 사용할 수 있는데 이는 원격이 임의의 IP 주소 및 포트 1533에서 수신 중이기 때문입니다. 연결 로그인에 원격 끝점에 대한 권한이 없으면 프로세스는 실패합니다. TSQL 기본 TCP와 같이 로그인에 권한이 있는 가능한 다른 끝점에 연결을 시도하지 않습니다.

  • 클라이언트에서 251.40.20.151:1433에 TCP 연결을 만들 경우 끝점에 정확히 일치하는 IP 주소 및 TCP 포트가 없고 TCP 포트 1533에 일치하는 IP 주소가 없지만 연결에 대해 TSQL 기본 TCP를 사용할 수 있는데 이는 TSQL 기본 TCP가 임의의 IP 주소 및 포트에서 수신 중이기 때문입니다.

업그레이드 및/또는 설치

기본적으로 모든 사용자에게는 관리자 전용 연결 끝점을 제외하고 TDS 끝점에 대한 액세스 권한이 있습니다. 이러한 끝점은 서버에서 내부적으로 생성되기 때문에 소유자가 없고 사용자가 특정 계정에 연관시킬 수도 없습니다.

Transact-SQL을 사용하여 끝점 관리

끝점은 Transact-SQL을 사용하여 생성되고 관리되며 CREATE ENDPOINT 문 및 DROP ENDPOINT 문을 사용하여 생성 및 삭제됩니다. 또한 끝점을 제어하거나, 변경하거나, 소유권을 취득하는 문도 있습니다.

Transact-SQL 끝점을 사용하여 SQL Server 인스턴스에 연결하려면 사용자에게 끝점에 대한 CONNECT 권한과 로그인할 SQL Server에 대한 전역 권한이 있어야 합니다. 기본 끝점에 연결할 권한은 로그인을 만들 때 사용자에게 암시적으로 제공됩니다. 끝점에 대한 액세스는 GRANT | DENY | REVOKE CONNECT ON ENDPOINT를 사용하여 관리됩니다.

새 TCP 끝점을 만들 때 SQL Server는 TSQL 기본 TCP 끝점에서 기존의 모든 사용 권한을 자동으로 취소합니다. 새 TCP 끝점을 만드는 방법에 대한 예를 보려면 방법: 여러 TCP 포트에서 수신하도록 데이터베이스 엔진 구성을 참조하십시오.

  • 끝점에 대한 액세스를 제한하기 위해 관리자는 DENY CONNECT 문을 사용하여 EVERYONE 그룹에 대한 사용 권한을 거부한 다음 GRANT CONNECT 문을 사용하여 특정 개인 또는 역할에 사용 권한을 부여할 수 있습니다.

  • 사용 권한을 원래 상태로 되돌리려면 PUBLIC 그룹에 대해 GRANT CONNECT 권한을 허용합니다.

  • 특정 응용 프로그램에 대한 끝점을 제공하려면 해당 응용 프로그램에 대한 사용자를 제외한 모든 사용자에게 DENY CONNECT 권한을 허용합니다.

보안 정보보안 정보

끝점을 사용할 권한은 끝점의 이름과 연관되어 있습니다. 끝점 이름이 변경되는 경우 보안 제한(예: DENY CONNECT 문)이 더 이상 적합하게 적용되지 않습니다. 끝점의 이름은 포트가 바뀔 때 변경됩니다. SQL Server가 동적 포트에서 수신하는 경우 포트가 변경될 수 있으며 그에 따라 끝점 이름이 변경되고 연관된 끝점 사용 권한이 삭제됩니다. 이러한 보안 위험을 막으려면 동적 포트와 연관된 끝점에 사용자 지정 권한을 설정하지 말고 레지스트리에서 TCP/IP 끝점이 발생한 순서를 변경하지 마십시오.

끝점의 보안을 설정하는 방법은 GRANT 끝점 사용 권한(Transact-SQL)을 참조하십시오.