適用対象:SQL Server
Azure SQL Managed Instance
このレッスンでは、イニシエーター データベースと、このチュートリアルで使用されるすべてのイニシエーター Service Broker オブジェクトを作成する方法について説明します。 これらの手順は、データベース エンジンの発信側インスタンスと同じコンピューターで実行されている Management Studio のコピーから実行してください。
手順
Service Broker エンドポイントの作成
次のコードをコピーしてクエリ エディター ウィンドウに貼り付け、それを実行して、データベース エンジンのこのインスタンスの Service Broker エンドポイントを作成します。 Service Broker エンドポイントは、Service Broker メッセージが送信されるネットワーク アドレスを指定します。 このエンドポイントは、Service Broker の既定の TCP ポート 4022 を使用し、データベース エンジンのリモート インスタンスが Windows 認証接続を使用してメッセージを送信することを指定します。
Windows 認証は、両方のコンピューターが同じドメイン内にあるか、信頼されたドメインにある場合に機能します。 コンピューターが信頼されたドメインにない場合は、エンドポイントに証明書セキュリティを使用します。 詳細については、「 方法: Service Broker トランスポート セキュリティ用の証明書を作成する」を参照してください。
USE master; GO IF EXISTS (SELECT * FROM sys.endpoints WHERE name = N'InstInitiatorEndpoint') DROP ENDPOINT InstInitiatorEndpoint; GO CREATE ENDPOINT InstInitiatorEndpoint STATE = STARTED AS TCP ( LISTENER_PORT = 4022 ) FOR SERVICE_BROKER ( AUTHENTICATION = WINDOWS ); GO
発信側データベース、マスター キー、およびユーザーの作成
次のコードをコピーし、クエリ エディター ウィンドウに貼り付けます。
CREATE MASTER KEYステートメントのパスワードを変更し、コードを実行して、このチュートリアルで使用するターゲット データベースを作成します。 既定では、新しいデータベースにはENABLE_BROKERオプションがオンに設定されています。 このコードは、暗号化およびリモート接続をサポートするために使用されるマスター キーとユーザーも作成します。USE master; GO IF EXISTS (SELECT * FROM sys.databases WHERE name = N'InstInitiatorDB') DROP DATABASE InstInitiatorDB; GO CREATE DATABASE InstInitiatorDB; GO USE InstInitiatorDB; GO CREATE MASTER KEY ENCRYPTION BY PASSWORD = N'<EnterStrongPassword2Here>'; GO CREATE USER InitiatorUser WITHOUT LOGIN; GO
発信側証明書の作成
次のコードをコピーし、クエリ エディター ウィンドウに貼り付けます。
BACKUP CERTIFICATEステートメントで指定されているファイル名を変更して、システム上のフォルダーを参照します。 次に、コードを実行して、メッセージの暗号化に使用されるイニシエーター証明書を作成します。 指定したフォルダーには、自分の Windows アカウント、およびデータベース エンジンのインスタンスが実行されている Windows アカウント以外のアカウントからのアクセスを防ぐアクセス許可が設定されている必要があります。 レッスン 3 では、発信先インスタンスからアクセス可能なフォルダーに InstInitiatorCertificate.cer ファイルを手動でコピーする必要があります。CREATE CERTIFICATE InstInitiatorCertificate AUTHORIZATION InitiatorUser WITH SUBJECT = N'Initiator Certificate', EXPIRY_DATE = N'12/31/2010'; BACKUP CERTIFICATE InstInitiatorCertificate TO FILE = N'C:\storedcerts\$ampleSSBCerts\InstInitiatorCertificate.cer'; GO
メッセージ型の作成
次のコードをコピーしてクエリ エディター ウィンドウに貼り付け、それを実行して会話のメッセージの種類を作成します。 ここで指定するメッセージの種類の名前とプロパティは、前のレッスンの
InstTargetDBで作成されたものと同じである必要があります。CREATE MESSAGE TYPE [//BothDB/2InstSample/RequestMessage] VALIDATION = WELL_FORMED_XML; CREATE MESSAGE TYPE [//BothDB/2InstSample/ReplyMessage] VALIDATION = WELL_FORMED_XML; GO
コントラクトの作成
次のコードをコピーしてクエリ エディター ウィンドウに貼り付け、それを実行して会話のコントラクトを作成します。 ここで指定するコントラクト名とプロパティは、次のレッスンで
InstInitiatorDBで作成するコントラクトと同じである必要があります。CREATE CONTRACT [//BothDB/2InstSample/SimpleContract] ([//BothDB/2InstSample/RequestMessage] SENT BY INITIATOR, [//BothDB/2InstSample/ReplyMessage] SENT BY TARGET); GO
発信側のキューおよびサービスの作成
次のコードをコピーしてクエリ エディター ウィンドウに貼り付け、それを実行して、ターゲットに使用されるキューとサービスを作成します。
CREATE SERVICEステートメントは、サービスを InstInitiatorQueue に関連付けます。 したがって、サービスに送信されたすべてのメッセージは、InstInitiatorQueue で受信されます。 また、このCREATE SERVICEでは、先ほど作成した BothDB/ 2InstSample/SimpleContract を使用する会話のみが、ターゲット サービスとしてサービスを使用できることを指定します。CREATE QUEUE InstInitiatorQueue; CREATE SERVICE [//InstDB/2InstSample/InitiatorService] AUTHORIZATION InitiatorUser ON QUEUE InstInitiatorQueue; GO
発信先オブジェクトへの参照の作成
次のコードをコピーし、クエリ エディター ウィンドウに貼り付けます。
FROM FILE句を変更して、レッスン 1 の手順 3 でInstTargetCertificate.cer ファイルをコピーしたフォルダーを参照します。 次にコードを実行し、発信先ユーザーを作成して発信先証明書を取り込みます。CREATE USER TargetUser WITHOUT LOGIN; CREATE CERTIFICATE InstTargetCertificate AUTHORIZATION TargetUser FROM FILE = N'C:\storedcerts\$ampleSSBCerts\InstTargetCertificate.cer'; GO
ルートを作成する
次のコードをコピーし、クエリ エディター ウィンドウに貼り付けます。 文字列 MyTargetComputer を、発信先インスタンスを実行しているコンピューターの名前に変更します。 次にコードを実行し、発信先サービスおよび発信側サービスへのルートと、TargetUser を発信先サービス ルートに関連付けるリモート サービス バインドを作成します。
次の
CREATE ROUTEステートメントは、ターゲット インスタンスに重複するサービス名がないことを前提としています。 ターゲット インスタンス上の複数のデータベースに同じ名前のサービスがある場合は、BROKER_INSTANCE句を使用して、会話を開くデータベースを指定します。DECLARE @Cmd AS NVARCHAR (4000); SET @Cmd = N'USE InstInitiatorDB; CREATE ROUTE InstTargetRoute WITH SERVICE_NAME = N''//TgtDB/2InstSample/TargetService'', ADDRESS = N''TCP://MyTargetComputer:4022'';'; EXECUTE (@Cmd); SET @Cmd = N'USE msdb CREATE ROUTE InstInitiatorRoute WITH SERVICE_NAME = N''//InstDB/2InstSample/InitiatorService'', ADDRESS = N''LOCAL'''; EXECUTE (@Cmd); GO CREATE REMOTE SERVICE BINDING TargetBinding TO SERVICE N'//TgtDB/2InstSample/TargetService' WITH USER = TargetUser; GO
関連タスク
- バックアップ証明書 (Transact-SQL)
- CREATE CERTIFICATE (Transact-SQL)
- CREATE CONTRACT (Transact-SQL)
- データベースを作成する
- エンドポイントを作成 (Transact-SQL)
- CREATE MASTER KEY (Transact-SQL)
- メッセージ型を作成 (Transact-SQL)
- キューを作成 (Transact-SQL)
- リモート サービス バインディングの作成 (Transact-SQL)
- CREATE ROUTE (Transact-SQL)
- CREATE SERVICE (Transact-SQL)
- ユーザーを作成 (Transact-SQL)
- EXECUTE (Transact-SQL)
- sp_addlinkedserver (Transact-SQL)
- Service Broker ダイアログのセキュリティ
- 会話アーキテクチャ
- サービス アーキテクチャ
次のステップ
これで、このチュートリアル用のイニシエーター データベースが正常に作成されました。 次に、イニシエーター オブジェクトに依存するターゲット オブジェクトを作成して、ターゲット データベースの構成を完了します。