レッスン 2 : 発信側データベースの作成
新規 : 2007 年 9 月 15 日
このレッスンでは、発信側データベースの作成方法と、このチュートリアルで使用されるすべての発信側 Service Broker オブジェクトの作成方法を学習します。この手順は、発信側のデータベース エンジン インスタンスと同じコンピュータ上で実行されている Management Studio から実行してください。
手順
Service Broker エンドポイントの作成
クエリ エディタ ウィンドウに、次のコードをコピーして貼り付けます。次に、このコードを実行して、このデータベース エンジン インスタンスに対する Service Broker エンドポイントを作成します。Service Broker エンドポイントにより、Service Broker メッセージの送信先のネットワーク アドレスが指定されます。このエンドポイントでは既定で TCP ポート 4022 の Service Broker を使用し、リモートのデータベース エンジン インスタンスで Windows 認証接続を使用してメッセージを送信するように指定します。
両方のコンピュータが同じドメインに属しているか、信頼されたドメインに属している場合に、Windows 認証が機能します。コンピュータが信頼されたドメインに属していない場合、エンドポイントにセキュリティ証明書を使用します。詳細については、「Service Broker トランスポート セキュリティの証明書を作成する方法 (Transact-SQL)」を参照してください。
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 で InstTargetCertficate.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 NVARCHAR(4000); SET @Cmd = N'USE InstInitiatorDB; CREATE ROUTE InstTargetRoute WITH SERVICE_NAME = N''//TgtDB/2InstSample/TargetService'', ADDRESS = N''TCP://MyTargetComputer:4022'';'; EXEC (@Cmd); SET @Cmd = N'USE msdb CREATE ROUTE InstInitiatorRoute WITH SERVICE_NAME = N''//InstDB/2InstSample/InitiatorService'', ADDRESS = N''LOCAL'''; EXEC (@Cmd); GO CREATE REMOTE SERVICE BINDING TargetBinding TO SERVICE N'//TgtDB/2InstSample/TargetService' WITH USER = TargetUser; GO
次の手順
チュートリアルに使用する発信側データベースが正常に作成されました。次に、発信側オブジェクトと依存関係を持たない対象オブジェクトを作成して、対象データベースの設定を完了します。「レッスン 3 : メッセージ交換の対象オブジェクトの作成完了」を参照してください。
参照
その他の技術情報
BACKUP CERTIFICATE (Transact-SQL)
CREATE CERTIFICATE (Transact-SQL)
CREATE CONTRACT (Transact-SQL)
CREATE DATABASE (Transact-SQL)
CREATE ENDPOINT (Transact-SQL)
CREATE MASTER KEY (Transact-SQL)
CREATE MESSAGE TYPE (Transact-SQL)
CREATE QUEUE (Transact-SQL)
CREATE REMOTE SERVICE BINDING (Transact-SQL)
CREATE ROUTE (Transact-SQL)
CREATE SERVICE (Transact-SQL)
CREATE USER (Transact-SQL)
EXECUTE (Transact-SQL)
sp_addlinkedserver (Transact-SQL)
Service Broker ダイアログ セキュリティ
メッセージ交換のアーキテクチャ
サービスのアーキテクチャ