Cómo configurar los servicios de destino para seguridad de diálogo completa (Transact-SQL)

SQL Server utiliza la seguridad de diálogo para cualquier conversación con un servicio para el que existe un enlace de servicio remoto en la base de datos que hospeda el servicio iniciador. Si la base de datos que hospeda el servicio de destino contiene un usuario que corresponde al usuario que creó el diálogo, el diálogo utiliza la seguridad completa.

Para asegurarse de que un servicio de destino utiliza la seguridad de diálogo, cree un usuario para que el servicio iniciador inicie sesión como tal. Para cada servicio iniciador, cree un usuario e instale el certificado para el usuario iniciador. Observe que un servicio de destino no utiliza ningún enlace de servicio remoto.

Para configurar un servicio de destino para seguridad de diálogo completa

  1. Cree un usuario sin inicio de sesión.

  2. Cree un certificado para el usuario.

    Nota

    El certificado debe estar cifrado con la clave maestra. Para obtener más información, vea CREATE MASTER KEY (Transact-SQL).

  3. Convierta a ese usuario en el propietario del servicio de destino.

  4. Realice una copia de seguridad del certificado en un archivo.

    Nota de seguridadNota de seguridad

    Realice la copia de seguridad solo del certificado para este usuario. No realice ninguna otra copia de seguridad ni distribuya la clave privada asociada con el certificado.

  5. Conceda permiso al usuario del servicio de destino para recibir mensajes de la cola que utiliza el servicio de destino.

  6. Proporcione el certificado y el nombre del servicio iniciador al administrador de la base de datos remota.

    Nota

    Para que SQL Server utilice la seguridad de diálogo completa, el certificado debe instalarse en la base de datos remota y el usuario del certificado debe ser el usuario especificado en el enlace de servicio remoto para el servicio de destino.

  7. Obtenga un certificado para un usuario en la base de datos remota de un origen de confianza. Normalmente, esto supone enviar la certificando mediante un correo electrónico cifrado o transferir el certificado en un medio físico, como un disquete.

    Nota de seguridadNota de seguridad

    Instale solamente certificados que provengan de fuentes de confianza.

  8. Cree un usuario sin inicio de sesión.

  9. Instale el certificado para el servicio iniciador. El usuario creado en el paso anterior será el propietario del certificado.

  10. Cree un usuario sin inicio de sesión para el certificado del servicio iniciador.

  11. Conceda permiso al usuario iniciador para enviar mensajes al servicio de destino.

Ejemplo

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