sp_addlinkedsrvlogin (Transact-SQL)

Crea o actualiza una asignación entre un inicio de sesión en la instancia local de SQL Server y una cuenta de seguridad en un servidor remoto.

Icono de vínculo a temas Convenciones de sintaxis de Transact-SQL

Sintaxis

sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname' 
     [ , [ @useself = ] 'TRUE' | 'FALSE' | NULL ] 
     [ , [ @locallogin = ] 'locallogin' ] 
     [ , [ @rmtuser = ] 'rmtuser' ] 
     [ , [ @rmtpassword = ] 'rmtpassword' ] 

Argumentos

  • [ @rmtsrvname = ] 'rmtsrvname'
    Es el nombre del servidor vinculado al que se aplica la asignación de inicio de sesión. rmtsrvname es de tipo sysname y no tiene ningún valor predeterminado.

  • [ @useself = ] 'TRUE' | 'FALSE' | 'NULL'
    Determina si se debe conectar a rmtsrvname suplantando inicios de sesión locales o enviando explícitamente un inicio de sesión y la contraseña. El tipo de datos es varchar(8) y su valor predeterminado es TRUE.

    Un valor TRUE especifica que los inicios de sesión utilizan sus propias credenciales para conectarse a rmtsrvname y se omiten los argumentos rmtuser y rmtpassword. FALSE especifica que los argumentos rmtuser y rmtpassword se utilizan para conectarse a rmtsrvname para el valor de locallogin especificado. Si rmtuser y rmtpassword también están establecidos en NULL, no se utiliza ningún inicio de sesión ni contraseña para conectarse al servidor vinculado.

  • [ @locallogin = ] 'locallogin'
    Es un inicio de sesión en el servidor local. locallogin es de tipo sysname y su valor predeterminado es NULL. NULL especifica que esta entrada se aplica a todos los inicios de sesión locales que se conectan a rmtsrvname. Si no es NULL, locallogin puede ser un inicio de sesión de SQL Server o de Windows. El inicio de sesión de Windows debe disponer de acceso a SQL Server, ya sea directamente o en calidad de miembro de un grupo de Windows al que se ha concedido acceso.

  • [ @rmtuser = ] 'rmtuser'
    Es el inicio de sesión remoto utilizado para conectarse a rmtsrvname cuando @useself es FALSE. Cuando el servidor remoto es una instancia de SQL Server que no utiliza la Autenticación de Windows, rmtuser es un inicio de sesión de SQL Server. rmtuser es de tipo sysname y su valor predeterminado es NULL.

  • [ @rmtpassword = ] 'rmtpassword'
    Es la contraseña asociada a rmtuser. rmtpassword es de tipo sysname y su valor predeterminado es NULL.

Valores de código de retorno

0 (correcto) o 1 (error)

Comentarios

Cuando un usuario inicia la sesión en el servidor local y ejecuta una consulta distribuida que obtiene acceso a una tabla del servidor vinculado, el servidor local debe iniciar la sesión en el servidor vinculado en nombre del usuario para obtener acceso a esa tabla. Utilice sp_addlinkedsrvlogin para especificar las credenciales de inicio de sesión que utiliza el servidor local para iniciar sesión en el servidor vinculado.

[!NOTA]

Para crear los mejores planes de consulta cuando utiliza una tabla en un servidor vinculado, el procesador de consultas debe disponer de estadísticas de distribución de datos del servidor vinculado. Los usuarios con permisos limitados en las columnas de la tabla puede que no tengan permisos suficientes para obtener todas las estadísticas de utilidad, y puede que reciban un plan de consulta menos eficaz y experimenten un bajo rendimiento. Si el servidor vinculado es una instancia de SQL Server, para obtener todas las estadísticas disponibles, el usuario debe ser propietario de la tabla o miembro del rol fijo de servidor sysadmin, del rol fijo de base de datos db_owner o del rol fijo de base de datos db_ddladmin en el servidor vinculado. SQL Server 2012 SP1 modifica las restricciones de permisos para obtener estadísticas y permite a los usuarios que disponen del permiso SELECT tener acceso a las estadísticas disponibles mediante DBCC SHOW_STATISTICS. Para obtener más información, vea la sección Permisos de DBCC SHOW_STATISTICS (Transact-SQL).

Al ejecutar sp_addlinkedserver, se crea automáticamente una asignación predeterminada entre todos los inicios de sesión del servidor local y los inicios de sesión remotos del servidor vinculado. La asignación predeterminada indica que SQL Server utiliza las credenciales de usuario del inicio de sesión local al conectarse al servidor vinculado en nombre del inicio de sesión. Esto equivale a ejecutar sp_addlinkedsrvlogin con @useself establecido en true para el servidor vinculado, sin necesidad de especificar un nombre de usuario local. Utilice sp_addlinkedsrvlogin solo para cambiar la asignación predeterminada o para agregar asignaciones nuevas para inicios de sesión locales específicos. Para eliminar la asignación predeterminada o cualquier otra asignación, use sp_droplinkedsrvlogin.

En lugar de tener que usar sp_addlinkedsrvlogin para crear una asignación de inicio de sesión predeterminada, SQL Server puede utilizar automáticamente las credenciales de seguridad de Windows (nombre de inicio de sesión y contraseña de Windows) de un usuario que emita la consulta para conectarse a un servidor vinculado cuando se den todas estas condiciones:

  • Un usuario se conecta a SQL Server mediante el Modo de autenticación de Windows.

  • La delegación de cuentas de seguridad está disponible en el cliente y en el servidor de envío.

  • El proveedor admite el Modo de autenticación de Windows (por ejemplo, SQL Server se ejecuta en Windows).

[!NOTA]

La delegación no tiene que estar habilitada en escenarios de un solo salto, pero es necesaria en escenarios de varios saltos.

Cuando el servidor vinculado ya ha realizado la autenticación utilizando las asignaciones que se definen al ejecutar sp_addlinkedsrvlogin en la instancia local de SQL Server, los permisos para cada objeto individual de la base de datos remota los determina el servidor vinculado, no el servidor local.

sp_addlinkedsrvlogin no se puede ejecutar en una transacción definida por el usuario.

Permisos

Se requiere el permiso ALTER ANY LOGIN en el servidor.

Ejemplos

A. Conectar todos los inicios de sesión locales al servidor vinculado mediante sus propias credenciales de usuario

En el ejemplo siguiente se crea una asignación para asegurar que todos los inicios de sesión en el servidor local se conectan a través del servidor vinculado Accounts mediante sus propias credenciales de usuario.

EXEC sp_addlinkedsrvlogin 'Accounts';

O bien,

EXEC sp_addlinkedsrvlogin 'Accounts', 'true';

[!NOTA]

Si hay asignaciones explícitas creadas para inicios de sesión individuales, éstas tienen prioridad sobre cualquier asignación global que exista para ese servidor vinculado.

B. Conectar un inicio de sesión específico al servidor vinculado mediante credenciales de usuario distintas

En el ejemplo siguiente se crea una asignación para asegurar que solo el usuario de Windows Domain\Mary se conecta a través del servidor vinculado Accounts mediante el inicio de sesión MaryP y la contraseña d89q3w4u.

EXEC sp_addlinkedsrvlogin 'Accounts', 'false', 'Domain\Mary', 'MaryP', 'd89q3w4u';
Nota de seguridadNota de seguridad

En este ejemplo no se utiliza la autenticación de Windows. Las contraseñas se transmiten sin cifrar. Las contraseñas se pueden ver en scripts y definiciones de origen de datos guardadas en disco, en copias de seguridad y en archivos de registro. No utilice nunca una contraseña de administrador en este tipo de conexión. Solicite a su administrador de red directrices de seguridad específicas para este entorno.

Vea también

Referencia

Vistas de catálogo de servidores vinculados (Transact-SQL)

sp_addlinkedserver (Transact-SQL)

sp_droplinkedsrvlogin (Transact-SQL)

Procedimientos almacenados del sistema (Transact-SQL)