Http.sys の使用による URL 名前空間の予約

この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。新しい開発作業では、この機能の使用を避け、現在この機能を使用しているアプリケーションは修正するようにしてください。

HTTP.SYS 内で URL 名前空間を明示的に予約してから、この名前空間を使用して HTTP エンドポイントを作成できます。この操作を行うには、明示的および暗黙的な名前空間の予約の考え方と、SQL Server が HTTP.SYS を使用して HTTP エンドポイントを登録する方法について理解する必要があります。

明示的な名前空間の予約と暗黙的な名前空間の予約

ユーザーが次のような CREATE ENDPOINT ステートメントを実行したとします。

CREATE ENDPOINT sql_endpoint 
   STATE = STARTED
AS HTTP (
   PATH = '/sql/AdvWorks', 
   AUTHENTICATION = (INTEGRATED ), 
   PORTS = ( CLEAR ), 
   SITE = 'MyServer'
)
FOR SOAP (
    ...
)
Go

名前空間 http://MyServer:80/sql/AdvWorks は HTTP.SYS 内で暗黙的に予約されます。つまり、SQL Server ベースのアプリケーションの実行中、このエンドポイントに対するすべての HTTP 要求が SQL Server のインスタンスに転送されます。ただし、SQL Server のインスタンスが実行されていない場合、この名前空間は他のアプリケーションから使用できます。

明示的に名前空間を予約すると、その名前空間は SQL Server 専用に予約され、このエンドポイントに対するすべての HTTP 要求が SQL Server のインスタンスに転送されます。詳細については、「HTTP 名前空間の予約」を参照してください。

注意

Visual Studio 2005 と Http.sys は、異なる URL 正規化規則に従っています。たとえば、Http.sys では、エンドポイントの作成時に PATH 設定の一部として指定される "/SQL/Mypath/..." など、包括的なワイルドカードを使用できます。しかし、Visual Studio 2005 の正規化規則はより厳密であり、URL を転送する前に "..." の情報が切り捨てられます。

SQL Server でのエンドポイントの登録方法

HTTP エンドポイントを管理するには、CREATE ENDPOINTALTER ENDPOINT、および DROP ENDPOINT を使用します。エンドポイントの作成、変更、または削除に必要な権限を持っている必要があります。これについては、「GRANT (エンドポイントの権限の許可) (Transact-SQL)」に記載されています。

CREATE ENDPOINT を実行してエンドポイントを作成すると、SQL Server によりステートメントが実行され、そのエンドポイントが HTTP.SYS に登録されます。エンドポイント ステートメントを指定したコンテキストに応じて、SQL Server では、次のように呼び出し元の権限が借用されます。

  • Windows アカウントのコンテキストでステートメントを実行した場合、SQL Server は、呼び出し元の権限を借用してエンドポイントを HTTP.SYS に登録します。

  • sa やその他の SQL Server ログインなど、SQL Server アカウントのコンテキストでステートメントを実行した場合、SQL Server は、SQL Server のインストール時に指定された SQL Server アカウントを使用して呼び出し元の権限を借用します。

HTTP エンドポイントの登録を成功させるには、SQL Server が権限を借用している Windows アカウントと SQL Server アカウントがローカルの Windows 管理者特権を持っている必要があります。

予約された HTTP 名前空間の確認

HTTP.SYS で予約されている名前空間を確認するには、HTTP Configuration Utility の Httpcfg.exe をコマンド プロンプトで実行します。

注意

Httpcfg.exe は、Windows Server サポート ツールの一部としてインストールされます。詳細については、「HTTP カーネル モード ドライバ (Http.sys) の構成」を参照してください。

Httpcfg.exe を使用して、予約された HTTP 名前空間の一覧を返す例を次に示します。

httpcfg query urlacl

このコマンドを実行すると、既存の予約済みの名前空間がすべて一覧表示されます。返される情報は、名前空間の URL とその名前空間を予約したアカウントです。

このコマンドの一般的な出力結果を次に示します。

URL: http://adventure-works.com:80/sql/
ACL : D:(A;;GA;;;S-1-5-21-123456789-1234567890-1262470759-1010)
-----------------------------------------------------------------
URL : https://adventure-works.com:443/sql/
ACL : D:(A;;GA;;;NS)
-----------------------------------------------------------------
注意

このプロシージャを実行できるのは、sysadmin ロールのメンバのみです。また、コンピュータの管理者特権を持つ権限借用アカウントが必要です。