Как настроить целевые службы для полной безопасности диалога (Transact-SQL)

SQL Server применяет средства обеспечения безопасности диалогов для любого сеанса связи со службой, для которой в базе данных, обслуживающей инициировавшую диалог службу, имеется привязка удаленной службы. Когда в обслуживающей целевую службу базе данных содержатся сведения о пользователе, относящиеся к пользователю, который создал диалог, этот диалог проводится с использованием всех средств обеспечения безопасности.

Чтобы удостовериться в том, что целевая служба использует средства обеспечения безопасности диалога, создайте пользователя для инициировавшей диалог службы, чтобы под этим именем можно было зарегистрироваться в системе. Для каждой инициирующей службы создайте пользователя и установите сертификат для инициирующего пользователя. Следует учесть, что целевая служба не использует удаленную привязку к службе.

Настройка целевой службы для обеспечения полной безопасности диалогов

  1. Создайте пользователя без имени входа.

  2. Создайте сертификат для этого пользователя.

    ПримечаниеПримечание

    Этот сертификат должен быть зашифрован при помощи главного ключа. Дополнительные сведения см. в разделе CREATE MASTER KEY (Transact-SQL).

  3. Сделайте этого пользователя владельцем целевой службы.

  4. Создайте резервную копию сертификата в файле.

    Примечание по безопасностиПримечание по безопасности

    Создайте резервную копию сертификата только этого пользователя. Не создавайте резервные копии, связанного с сертификатом закрытого ключа и не распространяйте его.

  5. Предоставьте пользователю целевой службы разрешение на получение сообщений из очереди, используемой целевой службой.

  6. Предоставьте сертификат и имя службы, инициирующей взаимодействие, администратору удаленной базы данных.

    ПримечаниеПримечание

    Чтобы SQL Server мог применять все средства обеспечения безопасности диалогов, сертификат должен быть установлен в удаленной базе данных, а пользователь сертификата должен быть указан в этом качестве в привязке удаленной службы для целевой службы.

  7. Получите сертификат для пользователя удаленной базы данных из надежного источника. Обычно в таких случаях сертификат пересылается в зашифрованном электронном письме или передается на физическом носителе, например на гибком диске.

    Примечание по безопасностиПримечание по безопасности

    Устанавливайте сертификаты, полученные только из доверенных источников.

  8. Создайте пользователя без имени входа.

  9. Установите сертификат для инициирующей службы. Владельцем сертификата является пользователь, созданный на предыдущем этапе.

  10. Создайте пользователя без имени входа для сертификата инициирующей службы.

  11. Предоставьте инициирующему пользователю право направлять сообщения для целевой службы.

Пример

USE AdventureWorks2008R2 ;
GO

--------------------------------------------------------------------
-- The first part of the script configures security for the local user.
-- The script creates a user in this database, creates a certificate
-- for the user, writes the certificate to the file system, and
-- grants permissions to the user. Since this service is a target
-- service, no remote service binding is necessary.


-- Create a user without a login. For convenience,
-- the name of the user is based on the name of the
-- the remote service.

CREATE USER [SupplierOrdersUser]
    WITHOUT LOGIN;
GO

-- Create a certificate for the initiating service
-- to use to send messages to the target service.

CREATE CERTIFICATE [SupplierOrdersCertificate]
    AUTHORIZATION [SupplierOrdersUser]
    WITH SUBJECT = 'Certificate for the SupplierOrders service user.';
GO

-- Dump the certificate. Provide the certificate file
-- to the administrator for the database that hosts
-- the other service.

BACKUP CERTIFICATE [SupplierOrdersCertificate]
   TO FILE = 'C:\Certificates\SupplierOrders.cer';
GO
-- Make this user the owner of the target service.

ALTER AUTHORIZATION ON SERVICE::SupplierOrders TO [SupplierOrdersUser];
GO

-- Grant receive on the orders queue to the local user.

GRANT RECEIVE ON SupplierOrdersQueue
    TO [SupplierOrdersUser];
GO

---------------------------------------------------------------
-- The second part of the script configures security in this
-- database for the remote service. This consists of creating
-- a user in this database, loading the certificate for the remote
-- service, and granting permissions for the user.


-- Create a user without a login.

CREATE USER [OrderPartsUser]
    WITHOUT LOGIN;
GO

-- Install a certificate for the initiating user.
-- The certificate is provided by the owner of the
-- initiating service.

CREATE CERTIFICATE [OrderPartsCertificate]
    AUTHORIZATION [OrderPartsUser]
    FROM FILE='C:\Certificates\OrderParts.cer';
GO

-- Grant send on the target service to the user for the
-- initating service.

GRANT SEND ON SERVICE::[SupplierOrders]
    TO [OrderPartsUser];
GO