ネットワーク プロトコルと TDS エンドポイント
SQL Server データベース エンジンは、アプリケーションと通信する際、通信を表形式データ ストリーム (TDS) パケットと呼ばれる Microsoft の通信形式にフォーマットします。ネットワークの SQL Server ネットワーク インターフェイス (SNI) プロトコル レイヤは、SQL Server 2000 および Microsoft Data Access Components (MDAC) の Net-Library に代わるもので、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 エンドポイントを作成し使用する方法について説明します。サーバーの構成方法の詳細については、「サーバーのネットワーク プロトコルと Net-Library の構成」を参照してください。
クライアント コンピュータの 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 をインストールする方法」を参照してください。
ネットワーク接続がインストールおよび構成されると、SQL Server は任意の組み合わせのサーバー ネットワーク プロトコルで同時にリッスンできます。
定義された TDS エンドポイント
TDS エンドポイントは、SQL Server とクライアントの間の通信ポイントを表す SQL Server オブジェクトです。SQL Server は、SQL Server がサポートする 4 つのプロトコルのそれぞれに、専用のエンドポイントを自動的に作成します。既定では、プロトコルが有効化されると、すべてのユーザーがそのプロトコルのエンドポイントにアクセスできます。ネットワーク プロトコルが有効化されていない場合、エンドポイント自体は存在しますが、使用できません。DAC (専用管理者接続) 用にも、専用エンドポイントが作成されます。これは、sysadmin 固定サーバー ロールのメンバしか使用できません。
SQL Server は各 TDS エンドポイントに一意の名前を生成します。自動的に作成されるエンドポイントを次の表に示します。
目的 |
エンドポイント名 |
---|---|
共有メモリ |
TSQL LocalMachine |
名前付きパイプ |
TSQL Named Pipes |
TCP/IP |
TSQL Default TCP |
VIA |
TSQL Default VIA |
DAC |
Dedicated Admin Connection |
HTTP |
HyperText Transport Protocol |
名前付きパイプと共有メモリの場合は、インスタンスごとに 1 つのエンドポイントしか作成できません。これらのプロトコルのエンドポイントは構成できません。TCP/IP と VIA には、既定のエンドポイントがありますが、追加でエンドポイントを作成できます。HTTP エンドポイントもユーザーにより作成され、SQL Server 構成マネージャには表示されません。
システム エンドポイントで変更できるのは所有者と状態のみです (ALTER ENDPOINT を使用)。既定のエンドポイントを無効にすることはできませんが、停止や開始は可能です。停止されたエンドポイントはリッスン状態を続行しますが、新しい接続は拒否し、切断します。
注意 |
---|
既定では、クライアントは、機能するプロトコルが見つかるまで、すべてのプロトコルを試すように構成されています。TCP/IP が無効化されていると、クライアントは次のプロトコルを試します。TCP/IP が有効化されている場合にエンドポイントが停止されると、接続要求が拒否されないので、クライアントは別のプロトコルを試行しませんが、停止された接続は使用できません。この場合は、アクティブなエンドポイントに明示的に接続する必要があります。 |
動的 TCP ポートは、通常、既定の TCP エンドポイントに接続されます。
レジストリ内のプロトコル設定
TDS エンドポイントの設定は、レジストリに記録されます。エンドポイントの作成または変更には Transact-SQL ステートメントを使用し、プロトコルの有効化または無効化 (これによりエンドポイントが開始または停止されます) には SQL Server 構成マネージャを使用します。
レジストリ内のプロトコル設定を変更しても、何の影響もありません。レジストリとメタデータは分離されています。
ユーザー接続とエンドポイントの関連付け
データベース エンジンに接続する場合、SQL Server では接続が特定のエンドポイントに関連付けられ、接続するログインにそのエンドポイントを使用する権限が与えられているかどうかが判断されます。接続は次のように関連付けられます。
共有メモリ接続は、TSQL LocalMachine エンドポイントを使用します。
名前付きパイプ接続は、TSQL Named Pipes エンドポイントを使用します。
専用管理者接続は、Dedicated Admin Connection エンドポイントを使用します。
既定では、TCP 接続は、TSQL Default TCP エンドポイントを使用します。ある TCP ポート用に新しい (ユーザーが定義した) TCP エンドポイントが作成されている場合は、その TCP ポートは新しいエンドポイントを使用します。TCP/TSQL エンドポイントが IP_ANY を使用してポートとして作成されている場合は、TCP 接続はこのエンドポイントを使用します。
VIA 接続は TCP 接続と同じように処理されます。
ユーザー定義エンドポイントは既定のエンドポイントと同じように動作します。ある IP アドレス (または IP_ANY を使用するすべての IP アドレス) とある TCP ポート用にエンドポイントを作成した場合、このエンドポイントに接続する権限は、準備と呼ばれるプロセスでユーザーに許可されます。サーバーが実際に目的の IP アドレスと TCP ポートをリッスンしているかどうかにかかわらず、準備が実行されます。ある IP アドレスと TCP ポートへの接続は、次の順番でエンドポイントに対応付けられます。
IP アドレスと TCP ポートがエンドポイントに構成されている IP アドレスと TCP ポートと完全に一致する場合、このエンドポイントが使用されます。
完全に一致しない場合は、すべての IP_ANY エンドポイントを確認し、その中に対象の TCP ポートが含まれている場合は、このエンドポイントが使用されます。
一致するポートがなかった場合は、既定の TCP エンドポイントが使用されます。
接続の関連付け処理の結果、必ず 1 つのエンドポイントが選択されます。続いて、選択されたエンドポイントに接続する権限があるかどうかが確認されます。ユーザーにこのエンドポイントへの接続権限がなかった場合、関連付け処理で代わりのエンドポイントの検索は行われません。
例 : ユーザー接続とエンドポイントの関連付け
次の例は、IP アドレスと TCP ポートを使用してエンドポイントが選択される方法を示しています。サーバーが次の IP アドレスと TCP ポートをリッスンするように構成されているとします。
127.0.0.1:1533
また、次の TCP エンドポイントが作成されているとします。
エンドポイント名 |
構成されている値 |
---|---|
Loopback |
LISTENER_IP= 127.0.0.1 および LISTENER_PORT = 1533 |
Remote |
LISTENER_IP = ALL および LISTENER_PORT = 1533 |
TSQL Default TCP |
特定の IP アドレスやポートへの関連付けなし |
この場合、次の 3 とおりの接続の関連付けが考えられます。
クライアントが 127.0.0.1:1533 への TCP 接続を確立した場合、このセッションに関連付けられるエンドポイントは Loopback エンドポイントになります。これは、Loopback エンドポイントに構成されている IP アドレスと TCP ポートに完全に一致するためです。
クライアントが 251.40.20.151:1533 への TCP 接続を確立した場合、この接続の IP アドレスと TCP ポートに完全に一致する構成のエンドポイントはありませんが、この接続には Remote を使用できます。これは、Remote がすべての IP アドレスとポート 1533 をリッスンしているためです。この接続のログインに、Remote エンドポイントへ接続する権限がなかった場合は、処理が失敗します。TSQL Default TCP など、ログインに権限がある可能性のある他のエンドポイントへの接続は試行されません。
クライアントが 251.40.20.151:1433 への TCP 接続を確立した場合に、この接続の IP アドレスと TCP ポートに完全に一致するアドレスとポートが構成されているエンドポイントがなく、TCP ポート 1533 (IP アドレスは問わず) とも一致するエンドポイントがない場合でも、この接続には TSQL Default TCP を利用できます。これは、TSQL Default 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 Default TCP エンドポイントに対する既存の権限をすべて取り消します。新しい TCP エンドポイントの作成方法の例については、「複数の TCP ポートでリッスンするようにデータベース エンジンを構成する方法」を参照してください。
エンドポイントへのアクセスを制御するには、EVERYONE グループの権限を拒否し (DENY CONNECT ステートメントを使用)、特定のユーザーまたはロールに権限を許可します (GRANT CONNECT ステートメントを使用)。
権限を元の状態に戻すには、PUBLIC グループに CONNECT 権限を許可します。
特定のアプリケーションにエンドポイントを割り当てるには、このアプリケーションのユーザー以外のすべてのユーザーの CONNECT 権限を拒否します。
セキュリティに関する注意 |
---|
エンドポイントを使用する権限は、エンドポイントの名前と関連付けられます。エンドポイントの名前が変更されると、セキュリティ制限 (DENY CONNECT ステートメントなど) は正しく適用されなくなります。ポートが変更されると、エンドポイントの名前も変わります。SQL Server が動的ポートをリッスンしていて、ポートが変わると、エンドポイント名が変更され、関連付けられていたエンドポイントの権限が削除されます。このようなセキュリティ リスクを回避するには、動的ポートに関連付けられるエンドポイントにはカスタム権限を設定しないようにします。また、レジストリに登録されている TCP/IP エンドポイントの順序も変更しないようにします。 |
エンドポイントのセキュリティを設定する方法の詳細については、「GRANT (エンドポイントの権限の許可) (Transact-SQL)」を参照してください。