イベント通知のダイアログ セキュリティ

リモート サーバー上の Service Broker にメッセージを送信するイベント通知には、Service Broker ダイアログ セキュリティを構成する必要があります。ダイアログ セキュリティは、Service Broker ダイアログの完全セキュリティ モデルに従って手動で構成する必要があります。詳細については、「Service Broker ダイアログ セキュリティ」の「完全セキュリティ」を参照してください。完全セキュリティ モデルでは、リモート サーバーとの間で送受信するメッセージの暗号化および暗号化解除が可能です。イベント通知は一方向に送信されますが、エラーなどのメッセージは逆方向にも返されます。

イベント通知のダイアログ セキュリティの構成

イベント通知のダイアログ セキュリティを実装するために必要な処理は、以下に示す手順のようになります。これらの手順には、送信元サーバーと送信先サーバーの両方で実行する必要のある操作が含まれています。送信元サーバーとは、イベント通知が作成されるサーバーです。送信先サーバーとは、イベント通知メッセージを受信するサーバーです。送信元サーバーと送信先サーバーで各手順の操作を実行する必要がある場合は、次の手順に進む前に両方のサーバーで完了する必要があります。

重要な注意事項重要

すべての証明書は、有効となる開始日と有効期限終了日を指定して作成する必要があります。

手順 1. : TCP ポート番号と送信先サービスの名前を設定します。

送信元サーバーと送信先サーバーの両方がメッセージを受信する TCP ポートを設定します。送信先サービスの名前も決定する必要があります。

手順 2. : データベース レベルの認証で共有される暗号化と証明書を構成します。

送信元サーバーと送信先サーバーの両方で次の操作を実行します。

送信元サーバー

送信先サーバー

イベント通知とマスター キーを格納するデータベースを選択または作成します。

マスター キーを格納するデータベースを選択または作成します。

送信元データベースにマスター キーが存在しない場合は、マスター キーを作成します。マスター キーは、送信元サーバーと送信先サーバーの両方のデータベースで、それぞれの証明書のセキュリティを確保するために必要となります。

送信先データベースにマスター キーが存在しない場合は、マスター キーを作成します。

送信元データベースでログインの作成とそれに対応するユーザーの作成を行います。

送信先データベースでログインとそれに対応するユーザーを作成します。

送信元データベースのユーザーが所有する証明書を作成します。

送信先データベースのユーザーが所有する証明書を作成します。

送信先サーバーからアクセス可能なファイルに証明書をバックアップします。

送信元サーバーからアクセス可能なファイルに証明書をバックアップします。

送信先データベースのユーザーと WITHOUT LOGIN を指定してユーザーを作成します。このユーザーは、バックアップ ファイルから作成された送信先データベースの証明書を所有します。このユーザーをログインにマッピングする必要はありません。なぜなら、このユーザーの唯一の目的は、後述の手順 3. で作成する送信先データベースの証明書を所有することだからです。

送信元データベースのユーザーと WITHOUT LOGIN を指定してユーザーを作成します。このユーザーは、バックアップ ファイルから作成された送信元データベースの証明書を所有します。このユーザーをログインにマッピングする必要はありません。なぜなら、このユーザーの唯一の目的は、後述の手順 3. で作成する送信元データベースの証明書を所有することだからです。

手順 3. : データベース レベルの認証で使用する証明書を共有し、権限を許可します。

送信元サーバーと送信先サーバーの両方で次の操作を実行します。

送信元サーバー

送信先サーバー

送信先データベースのユーザーを所有者に指定して、送信先の証明書のバックアップ ファイルから証明書を作成します。

送信元データベースのユーザーを所有者に指定して、送信元の証明書のバックアップ ファイルから証明書を作成します。

送信元データベースのユーザーに、イベント通知を作成する権限を許可します。この権限の詳細については、「CREATE EVENT NOTIFICATION (Transact-SQL)」を参照してください。

送信先データベースのユーザーに既存のイベント通知の Service Broker コントラクト : https://schemas.microsoft.com/SQL/Notifications/PostEventNotification に対する REFERENCES 権限を許可します。

送信先サービスへのリモート サービス バインドを作成し、送信先データベースのユーザーの資格情報を指定します。リモート サービス バインドは、送信先サーバーに送信されるメッセージが、送信元データベースのユーザーが所有する証明書の公開キーによって認証されることを保証します。

送信先データベースのユーザーに CREATE QUEUE 権限、CREATE SERVICE 権限、および CREATE SCHEMA 権限を許可します。

 

まだデータベースに送信先データベース ユーザーとして接続していない場合は、直ちに接続してください。

 

イベント通知メッセージを受信するキューを作成し、メッセージを配信するサービスを作成します。

 

送信元データベースのユーザーに、送信先サービスに対する SEND 権限を許可します。

送信元データベースの Service Broker 識別子を送信先サーバーに指定します。この識別子は、sys.databases カタログ ビューの service_broker_guid 列にクエリを実行することで取得できます。サーバー レベルのイベント通知の場合は、Service Broker 識別子として msdb を使用します。

送信先データベースの Service Broker 識別子を送信元サーバーに指定します。

手順 4. : ルートを作成し、サーバー レベルの認証を設定します。

送信元サーバーと送信先サーバーの両方で次の操作を実行します。

送信元サーバー

送信先サーバー

送信先サービスへのルートを作成し、送信先データベースの Service Broker 識別子と設定済み TCP ポート番号を指定します。

送信元サービスへのルートを作成し、送信元データベースの Service Broker 識別子と設定済み TCP ポート番号を指定します。送信元サービスを指定するには、https://schemas.microsoft.com/SQL/Notifications/EventNotificationService で提供されるサービスを使用します。

master データベースに切り替えて、サーバー レベルの認証を構成します。

master データベースに切り替えて、サーバー レベルの認証を構成します。

master データベースにマスター キーが存在しない場合は、マスター キーを作成します。

master データベースにマスター キーが存在しない場合は、マスター キーを作成します。

データベースを認証する証明書を作成します。

データベースを認証する証明書を作成します。

送信先サーバーからアクセス可能なファイルに証明書をバックアップします。

送信元サーバーからアクセス可能なファイルに証明書をバックアップします。

エンドポイントを作成し、設定済み TCP ポート番号、FOR SERVICE_BROKER (AUTHENTICATION = CERTIFICATE certificate_name)、および認証で使用する証明書の名前を指定します。

エンドポイントを作成し、設定済み TCP ポート番号、FOR SERVICE_BROKER (AUTHENTICATION = CERTIFICATE certificate_name)、および認証で使用する証明書の名前を指定します。

ログインを作成し、送信先サーバーのログインを指定します。

ログインを作成し、送信元サーバーのログインを指定します。

送信先の認証子のログインに、エンドポイントに対する CONNECT 権限を許可します。

送信元の認証子のログインに、エンドポイントに対する CONNECT 権限を許可します。

ユーザーを作成し、送信先の認証子のログインを指定します。

ユーザーを作成し、送信元の認証子のログインを指定します。

手順 5. : サーバー レベルの認証で使用する証明書を共有し、イベント通知を作成します。

送信元サーバーと送信先サーバーの両方で次の操作を実行します。

送信元サーバー

送信先サーバー

送信先の認証子のユーザーを所有者に指定して、送信先の証明書のバックアップ ファイルから証明書を作成します。

送信元の認証子のユーザーを所有者に指定して、送信元の証明書のバックアップ ファイルから証明書を作成します。

イベント通知を作成する送信元データベースに切り替えます。まだ送信元データベースのユーザーとして接続していない場合は、直ちに接続します。

送信先データベースに切り替えて、イベント通知メッセージを受信します。

イベント通知を作成し、送信先データベースの Broker Service と識別子を指定します。