Занятие 2. Создание вызывающей базы данных
Добавления: 15 сентября 2007 г.
На этом занятии будет показано, как создать инициирующую базу данных и все объекты инициатора Service Broker, которые используются в настоящем учебнике. Выполните эти шаги в среде Management Studio на том же компьютере, что и вызывающий экземпляр компонента Database Engine.
Процедуры
Создать конечную точку компонента Service Broker
Скопируйте и вставьте следующий код в окно редактора запросов. Затем выполните этот код, чтобы создать конечную точку компонента Service Broker для данного экземпляра компонента Database Engine. Конечная точка Service Broker указывает сетевой адрес, по которому передаются сообщения Service Broker. В этой конечной точке используется заданный по умолчанию в Service Broker порт 4022 протокола TCP и определяется, что для передачи сообщений удаленные экземпляры Database Engine должны использовать соединения с проверкой подлинности 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, от которой запущен экземпляр компонента Database Engine. Для подготовки к занятию 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, чтобы оно указывало на папку, в которую скопирован файл InstTargetCertficate.cer в шаге 3 занятия 1. Затем вызовите на выполнение код, чтобы создать целевую учетную запись пользователя и поместить в нее целевой сертификат.
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
Архитектура диалога
Архитектура служб