Compartilhar via


Como configurar serviços de destino para segurança completa de diálogo (Transact-SQL)

O SQL Server usa segurança de diálogo para qualquer conversação com um serviço para o qual exista uma associação de serviço remoto no banco de dados que hospeda o serviço inicial. Quando o banco de dados que hospeda o serviço de destino contém um usuário que corresponde ao que criou o diálogo, o diálogo usa a segurança completa.

Para certificar-se de que um serviço de destino use segurança de diálogo, crie um usuário para o serviço inicial com o qual fazer logon. Para cada serviço inicial, crie um usuário e instale o certificado para o usuário inicial. Observe que um serviço de destino não usa uma associação de serviço remoto.

  1. Crie um usuário sem um logon.

  2. Crie um certificado para o usuário.

    ObservaçãoObservação

    O certificado deve ser criptografado com a chave mestra. Para obter mais informações, consulte CREATE MASTER KEY (Transact-SQL).

  3. Torne esse usuário o proprietário do serviço de destino.

  4. Faça backup do certificado em um arquivo.

    Observação sobre segurançaObservação sobre segurança

    Só faça backup do certificado desse usuário. Não faça backup nem distribua a chave privada associada ao certificado.

  5. Conceda permissão para que o usuário do serviço de destino receba mensagens da fila que o serviço de destino usa.

  6. Forneça o certificado e o nome do serviço inicial ao administrador de banco de dados para o banco de dados remoto.

    ObservaçãoObservação

    Para que o SQL Server use segurança completa de diálogo, o certificado deve ser instalado no banco de dados remoto e o usuário do certificado deve ser o usuário especificado na associação de serviço remoto para o serviço de destino.

  7. Obtenha um certificado para um usuário no banco de dados remoto de uma fonte confiável. Geralmente isso envolve enviar o certificado usando email criptografado ou transferir o certificado em mídia física como, por exemplo, um disquete.

    Observação sobre segurançaObservação sobre segurança

    Instale somente certificados de origens confiáveis.

  8. Crie um usuário sem um logon.

  9. Instale o certificado para o serviço inicial. O usuário criado na etapa anterior possui o certificado.

  10. Crie um usuário sem logon para o certificado de serviço inicial.

  11. Conceda permissão para que o usuário inicial envie mensagens ao serviço de destino.

Exemplo

USE AdventureWorks ;
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