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 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.
Para configurar um serviço de destino para segurança completa de diálogo
Crie um usuário sem um logon.
Crie um certificado para o usuário.
Observação O certificado deve ser criptografado com a chave mestra. Para obter mais informações, consulte CREATE MASTER KEY (Transact-SQL).
Torne esse usuário o proprietário do serviço de destino.
Faça backup do certificado em um arquivo.
Observaçã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.
Conceda permissão para que o usuário do serviço de destino receba mensagens da fila que o serviço de destino usa.
Forneça o certificado e o nome do serviço inicial ao administrador de banco de dados para o banco de dados remoto.
Observaçã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.
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ça Instale somente certificados de origens confiáveis.
Crie um usuário sem um logon.
Instale o certificado para o serviço inicial. O usuário criado na etapa anterior possui o certificado.
Crie um usuário sem logon para o certificado de serviço inicial.
Conceda permissão para que o usuário inicial envie mensagens ao serviço de destino.
Exemplo
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
Consulte também