CREATE REMOTE SERVICE BINDING (Transact-SQL)
バインドを作成し、リモート サービスとのメッセージ交換を開始するときに使用するセキュリティ資格情報を定義します。
構文
CREATE REMOTE SERVICE BINDING binding_name
[ AUTHORIZATION owner_name ]
TO SERVICE 'service_name'
WITH USER = user_name [ , ANONYMOUS = { ON | OFF } ]
[ ; ]
引数
binding_name
作成するリモート サービス バインドの名前を指定します。サーバー、データベース、スキーマ名は指定できません。binding_name には、有効な sysname データ型で指定する必要があります。AUTHORIZATION owner_name
バインドの所有者を、指定したデータベース ユーザーまたはロールに設定します。現在のユーザーが dbo または sa の場合、owner_name には、任意の有効なユーザーまたはロールの名前を指定できます。それ以外の場合、owner_name には、現在のユーザーの名前、現在のユーザーが持つ IMPERSONATE 権限に対応するユーザーの名前、または現在のユーザーが所属するロールの名前を指定する必要があります。TO SERVICE 'service_name'
WITH USER 句のユーザーにバインドするリモート サービスを指定します。USER = user_name
TO SERVICE 句のリモート サービスに関連付けられた証明を所有しているデータベース プリンシパルを指定します。この証明は、リモート サービスと交換されるメッセージの暗号化と認証に使用されます。ANONYMOUS
リモート サービスと通信するときに匿名認証を使用するかどうかを指定します。ANONYMOUS を ON にすると匿名認証が使用され、リモート データベースでの操作は、public 固定データベース ロールのメンバによる操作として実行されます。ANONYMOUS を OFF にすると、リモート データベースでの操作は、そのデータベース固有のユーザーによる操作として実行されます。この句を指定しない場合、既定値は OFF になります。「Service Broker ダイアログ セキュリティ」では、SQL Server のダイアログ セキュリティによるリモート サービス バインドとプリンシパルのマップ方法を説明しています。
説明
Service Broker では、リモート サービス バインドを使用して、新しいメッセージ交換に使用する証明が検索されます。user_name に関連付けられている証明の公開キーは、リモート サービスに送信されるメッセージの認証とセッション キーの暗号化に使用されます。その後、暗号化されたセッション キーを使用して、メッセージ交換が暗号化されます。user_name の証明は、リモート サービスをホストするデータベースに格納されているユーザーの証明と対応している必要があります。
リモート サービス バインドは、SQL Server インスタンスの外部にある対象サービスと通信するサービスを開始する場合にのみ必要です。開始サービスをホストするデータベースには、SQL Server インスタンスの外部にあるすべての対象サービスのリモート サービス バインドが含まれている必要があります。ただし、対象サービスをホストするデータベースには、対象サービスと通信する開始サービスのリモート サービス バインドが含まれている必要はありません。開始サービスと対象サービスが SQL Server の同じインスタンス内にある場合、リモート サービス バインドは必要ありません。ただし、TO SERVICE に指定された service_name とローカル サービスの名前が一致する場所にリモート サービス バインドが存在する場合は、Service Broker ではそのバインドが使用されます。
ANONYMOUS を ON にした場合、開始サービスは、public 固定データベース ロールのメンバとして対象サービスに接続します。既定では、このロールのメンバはデータベースに接続する権限を持ちません。メッセージを正常に送信するには、対象のデータベースで、public ロールに対して、データベースへの CONNECT 権限と対象サービスへの SEND 権限が与えられている必要があります。
ユーザーが複数の証明を所有している場合は、Service Broker によって現在有効な証明のうち有効期限が最も新しい証明が選択され、その証明が AVAILABLE FOR BEGIN_DIALOG としてマークされます。
権限
リモート サービス バインドを作成する権限は、既定では、USER 句で指定されたユーザー、db_owner 固定データベース ロールのメンバ、db_ddladmin 固定データベース ロールのメンバ、sysadmin 固定サーバー ロールのメンバに与えられています。
CREATE REMOTE SERVICE BINDING ステートメントを実行するには、ステートメントで指定されるプリンシパルの借用権限が必要です。
リモート サービス バインドは一時オブジェクトとして指定できません。# で始まるリモート サービス バインド名は許可されますが、パーマネント オブジェクトになります。
例
A. リモート サービス バインドを作成する
次の例では、サービス //Adventure-Works.com/services/AccountsPayable のバインドを作成します。Service Broker では、データベース プリンシパル APUser が所有する証明を使用してリモート サービスへの認証が行われ、リモート サービスとの間でセッション暗号化キーが交換されます。
CREATE REMOTE SERVICE BINDING APBinding
TO SERVICE '//Adventure-Works.com/services/AccountsPayable'
WITH USER = APUser ;
B. 匿名認証を使用してリモート サービス バインドを作成する
次の例では、サービス //Adventure-Works.com/services/AccountsPayable のバインドを作成します。Service Broker では、データベース プリンシパル APUser が所有する証明を使用して、リモート サービスとの間でセッション暗号化キーが交換されます。Service Broker でリモート サービスへの認証は行われません。リモート サービスをホストするデータベースでは、メッセージは guest ユーザーとして配信されます。
CREATE REMOTE SERVICE BINDING APBinding
TO SERVICE '//Adventure-Works.com/services/AccountsPayable'
WITH USER = APUser, ANONYMOUS=ON ;