Compartilhar via


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

O SQL Server usa segurança de diálogo para qualquer conversa com um serviço para o qual existe uma associação de serviço remoto no banco de dados que hospeda o serviço inicial. Se o banco de dados que hospeda o serviço de destino contiver um usuário que corresponda ao que criou o diálogo e a associação de serviço remoto não especificar segurança anônima, então o diálogo usará segurança completa.

Para certificar-se de que um serviço iniciante use a segurança de diálogo, crie uma associação de serviço remoto para o serviço. Para que o SQL Server use segurança completa, a associação de serviço remoto não deve especificar segurança anônima e o banco de dados de destino deve ser configurado para usar segurança completa nesse serviço.

  1. Obtenha um certificado para o proprietário do serviço de destino no banco de dados remoto de uma fonte confiável. Geralmente isso envolve enviar o certificado usando email criptografado ou transferir o certificado em uma 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.

    ObservaçãoObservação

    O certificado deverá ser criptografado com a chave mestra para o banco de dados. Para obter mais informações, consulte CREATE MASTER KEY (Transact-SQL).

  2. Crie um usuário sem um logon para o serviço remoto.

  3. Instale o certificado para o usuário do serviço remoto. O usuário criado na etapa anterior possui o certificado.

  4. Crie uma associação de serviço remoto que especifique o usuário do serviço remoto e o serviço.

  5. Crie um usuário sem um logon como proprietário para o serviço local.

  6. Crie um certificado para o serviço local. O usuário criado na etapa anterior possui o certificado.

    ObservaçãoObservação

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

  7. Faça backup do certificado.

    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.

  8. Forneça o certificado e o nome do serviço iniciante ao administrador de banco de dados do banco de dados remoto. Por exemplo, você poderá trocar o certificado em mídia física como, por exemplo, um disquete ou um CD-ROM, colocando o certificado em um compartilhamento de arquivos ou através de email seguro.

    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 criado na etapa 7 deve ser o usuário que inicia a conversa.

Exemplo

USE AdventureWorks2008R2 ;
GO

--------------------------------------------------------------------
-- The first part of the script configures security to allow the
-- remote service to send messages in this database. The script creates
-- a user in this database, loads the certificate for the remote service,
-- grants permission to the user, and creates a remote service binding.

-- Given a certificate for the owner of the remote target service
-- SupplierOrders, create a remote service binding for
-- the service.  The remote user will be granted permission
-- to send messages to the local service OrderParts. 
-- This example assumes that the certificate for the service 
-- is saved in the file'C:\Certificates\SupplierOrders.cer' and that
-- the initiating service already exists.


-- 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

-- Install a certificate for a user
-- in the remote database. The certificate is
-- provided by the owner of the remote service. The
-- user for the remote service owns the certificate.

CREATE CERTIFICATE [SupplierOrdersCertificate]
    AUTHORIZATION [SupplierOrdersUser]
    FROM FILE='C:\Certificates\SupplierOrders.cer' ;
GO

-- Create the remote service binding. Notice
-- that the user specified in the binding
-- does not own the binding itself.

-- Creating this binding specifies that messages from
-- this database are secured using the certificate for
-- the [SupplierOrdersUser] user.

-- When the anonymous option is omitted, anonymous is OFF.
-- Therefore, the credentials for the user that begins
-- are used in the remote database.

CREATE REMOTE SERVICE BINDING [SupplierOrdersBinding]
    TO SERVICE 'SupplierOrders'
    WITH USER = [SupplierOrdersUser] ;
GO

--------------------------------------------------------------------
-- The second part of the script creates a local user that will begin
-- conversations to the remote service. The certificate for this
-- user must be provided to the owner of the remote service.


-- Create a user without a login for the local service.

CREATE USER [OrderPartsUser]
    WITHOUT LOGIN ;
GO

-- Create a certificate for the local service.
CREATE CERTIFICATE [OrderPartsCertificate]
    AUTHORIZATION [OrderPartsUser]
    WITH SUBJECT = 'Certificate for the order service user.';
GO

-- Make this user the owner of the initiator service.

ALTER AUTHORIZATION ON SERVICE::OrderParts TO OrderPartsUser 

-- Backup the certificate for the user that initiates the
-- conversation. This example assumes that the certificate
-- is named OrderServiceCertificate.
BACKUP CERTIFICATE [OrderPartsCertificate]
    TO FILE = 'C:\Certificates\OrderParts.cer' ;
GO

-- Grant RECEIVE permissions on the queue for the service.
-- This allows the local user to begin conversations from
-- services that use the queue.

GRANT RECEIVE ON [OrderPartsQueue] TO [OrderPartsUser] ;
GO