Cómo configurar los servicios de destino para seguridad de diálogo anónima (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 el enlace de servicio remoto especifica ANONYMOUS = ON, el diálogo utiliza seguridad anónima. En este caso, no es necesario que la base de datos de destino contenga un usuario para el servicio iniciador. El servicio iniciador actúa como public en la base de datos de destino.

Para configurar un servicio de destino para seguridad de diálogo anónima

  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. Realice una copia de seguridad del certificado en un archivo.

    Nota de seguridadNota de seguridad

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

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

  5. Conceda permiso a public para enviar mensajes al servicio de destino.

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

Ejemplo

USE AdventureWorks2008R2 ;
GO

--------------------------------------------------------------------
-- This script configures security for a local user in the database.
-- 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

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

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

GRANT RECEIVE ON SupplierOrdersQueue
    TO [SupplierOrdersUser];
GO

-- Grant send on the service to public.

GRANT SEND ON SERVICE::[SupplierOrders] TO public ;