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 temasConvenciones 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 el valor de @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 de base de datos fijo db_owner o del rol de base de datos fijo db_ddladmin en el servidor vinculado.

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, utilice 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 desde una transacción definida por el usuario.

Permisos

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.