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 にはポート番号を指定します。このプロシージャで URL 名前空間を予約すると、その名前空間における後続の DDL 操作ではコンピュータに対する管理者特権は必要ありません。したがって、コンピュータの管理者特権を持たないユーザーでも、エンドポイント 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> に指定されたコンピュータのすべてのホスト名に、予約操作が適用されることを示します。
アスタリスク (*) は、sp_reserve_http_namespace 操作を実行するなどして明示的に予約されていない <scheme> および <port> に考えられるすべてのコンピュータのホスト名、アクティブなエンドポイント、または他のアプリケーションに、この予約操作が適用されることを示します。
エンドポイントの名前空間の識別
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'