HTTP 네임스페이스 예약
Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 응용 프로그램은 수정하십시오.
SQL Server 인스턴스에 사용할 HTTP 네임스페이스 예약은 암시적 예약(예: CREATE ENDPOINT를 사용하는 경우)을 사용하거나 sp_reserve_http_namespace 저장 프로시저를 사용하여 명시적 예약으로 수행될 수 있습니다.
URL 네임스페이스를 예약하는 이유는 다음과 같습니다.
응용 프로그램이 관리자가 아닌 계정으로 실행되는 경우 관리자가 네임스페이스를 예약하지 않은 상태에서 런타임으로 네임스페이스에 바인딩할 수 없습니다. 이것은 커널 모드 HTTP 드라이버(Http.sys)의 요구 사항입니다.
이 규칙의 유일한 예외는 응용 프로그램이 로컬 시스템 계정으로 실행되고 있는 경우입니다. 로컬 시스템 계정으로 실행되고 있는 응용 프로그램이 네임스페이스를 사용할 수 있으면 모든 네임스페이스와 바인딩될 수 있습니다. 로컬 시스템 계정으로 실행하는 경우에도 네임스페이스를 예약하는 것이 좋은 이유는 다음과 같습니다.
네임스페이스를 예약하면 다른 응용 프로그램에서 이 네임스페이스에 바인딩할 수 없으며 해당 응용 프로그램만 이 네임스페이스를 소유할 수 있습니다.
예를 들어 SQL Server의 인스턴스가 로컬 시스템 계정으로 실행 중인 경우 네임스페이스 예약이 필수 사항은 아니지만 URL에 대한 응용 프로그램 충돌을 방지하기 위해 네임스페이스를 예약하는 것이 좋습니다.
네임스페이스 예약은 계층적입니다. 예를 들어 http://adventure-works.com:80/ 네임스페이스가 예약되어 있는 경우 모든 하위 네임스페이스 즉, http://adventure-works.com:80/sqlapp1 및 **http://adventure-works.com:80/sqlapp2/dir1**도 예약됩니다.
[!참고]
커널 모드 HTTP 드라이버(Http.sys)를 사용하여 HTTP 네임스페이스를 예약하려면 SQL Server 인스턴스가 설치된 로컬 컴퓨터에 대한 Windows 관리 권한이 필요합니다.
명시적 예약 만들기
명시적 예약을 만들려면 사용자가 컴퓨터에 대한 상위 권한없이 끝점 데이터 정의 언어(DDL) 문을 실행할 수 있게 하려는 관리자가 sp_reserve_http_namespace 저장 프로시저를 사용하여 URL 네임스페이스를 예약합니다.
예를 들어 Windows 인증(관리자 권한으로 로그인)을 사용하여 SQL Server 인스턴스에 연결하고 다음을 실행할 수 있습니다.
sp_reserve_http_namespace N'http://MyServer:80/sql'
GO
저장 프로시저는 서버 이름이 MyServer이고 포트 번호가 80인 지정된 네임스페이스를 명시적으로 예약합니다. 이 프로시저에서는 해당 네임스페이스 내의 후속 DDL 작업에 컴퓨터에 대한 관리자 권한이 필요하지 않은 방식으로 지정된 URL 네임스페이스를 예약합니다. 컴퓨터 관리자 권한이 없는 사용자도 끝점 DDL 문을 실행할 수 있습니다.
예를 들어 사용자는 다음 CREATE ENDPOINT 문을 실행할 수 있습니다.
CREATE ENDPOINT sql_endpoint
STATE = STARTED
AS HTTP(
PATH = '/sql/AdvWorks',
AUTHENTICATION = (INTEGRATED ),
PORTS = ( CLEAR ),
SITE = 'MyServer'
)
FOR SOAP (
...
)
GO
끝점 문은 HTTP.SYS의 예약된 네임스페이스에 /sql/AdvWorks를 등록합니다. 그러면 클라이언트 응용 프로그램에서 서버에 WSDL 응답을 요청하는 방식 등을 통해 SOAP 요청을 끝점으로 보낼 수 있습니다.
http://MyServer/sql/AdvWorks?wsdl
sp_reserve_http_namespace 저장 프로시저에 지정된 네임스페이스 이름은 다음과 같은 형식으로 이루어져야 합니다.
<scheme>://<hostpart>[:<port>]/<RelativeURI>
scheme
http 또는 https가 될 수 있습니다.hostpart
특정 호스트 이름이나 더하기 기호(+)나 별표(*)와 같은 와일드카드 문자일 수 있습니다.더하기 기호(+)는 지정된 <scheme> 및 <port>에 대해 컴퓨터에서 사용할 수 있는 모든 호스트 이름에 예약 작업이 적용된다는 것을 나타냅니다.
별표(*)는 그 외에 명시적으로 예약되지 않은 <scheme> 및 <port>의 경우 다른 sp_reserve_http_namespace 작업, 활성 끝점 또는 다른 응용 프로그램 등을 실행하여 사용 가능한 컴퓨터의 모든 호스트 이름에 예약 작업이 적용됨을 나타냅니다.
끝점의 네임스페이스 식별
CREATE ENDPOINT 문의 매개 변수를 기반으로 끝점의 올바른 네임스페이스를 식별할 수 있습니다.
CREATE ENDPOINT 문의 PORTS 매개 변수 값은 아래 표와 같이 네임스페이스의 스키마를 결정합니다.
끝점 값 |
<scheme> 값 |
---|---|
CLEAR |
http |
SSL |
https |
n |
http |
CLEAR_PORT 또는 SSL_PORT 매개 변수의 값은 네임스페이스의 <port> 값을 설정합니다.
PATH 매개 변수의 값은 네임스페이스의 <RelativeURI>를 설정합니다.
SITE 매개 변수 값은 네임스페이스의 <hostpart>를 설정합니다.
예를 들어 다음 문에서는 네임스페이스가 http://testhost:80/sqlurl/myapp인 끝점을 만듭니다.
CREATE ENDPOINT ext_endpoint
STATE = STARTED
AS HTTP (
PATH = '/sqlurl/myapp'
, PORTS = CLEAR
, SITE = testhost
, CLEAR_PORT = 80
)
다음 문에서는 네임스페이스가 https://*:443/sqlurl/myapp인 끝점을 만듭니다.
CREATE ENDPOINT ext_endpoint
STATE = STARTED
AS HTTP (
PATH = '/sqlurl/myapp'
, PORTS = SSL
, SITE = '*'
, SSL_PORT = 443
)
예
다음은 관리자가 SSL 연결을 위해 HTTP.SYS에 네임스페이스를 예약하는 다른 예 입니다. 따라서 사용자는 PORT가 SSL로 설정되는 끝점을 만들 수 있습니다.
sp_reserve_http_namespace N'https://MyServer:443/sql'