sp_addlinkedsrvlogin (Transact-SQL)

Se aplica a:SQL Server

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.

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 de un servidor vinculado al que se aplica la asignación de inicio de sesión. rmtsrvname es sysname, sin ningún valor predeterminado.

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

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

[ @locallogin = ] 'locallogin'
Es un inicio de sesión en el servidor local. locallogin es sysname, con un valor predeterminado de 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 un inicio de sesión de Windows. Se debe haber concedido acceso al inicio de sesión de Windows a SQL Server directamente o a través de su pertenencia a un grupo de Windows al que se ha concedido acceso.

[ @rmtuser = ] 'rmtuser'
Es el inicio de sesión remoto que se usa para conectarse a rmtsrvname cuando @useself es FALSE. Cuando el servidor remoto es una instancia de SQL Server que no usa la autenticación de Windows, rmtuser es un inicio de sesión de SQL Server. rmtuser es sysname, con un valor predeterminado de NULL.

[ @rmtpassword = ] 'rmtpassword'
Es la contraseña asociada a rmtuser. rmtpassword es sysname, con un valor predeterminado de NULL.

Valores de código de retorno

0 (correcto) o 1 (error)

Observaciones

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 poseer la tabla o ser miembro del rol fijo de servidor sysadmin, el rol fijo de base de datos db_owner o el 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, consulte 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 usa 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 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 usar automáticamente las credenciales de seguridad de Windows (nombre de inicio de sesión y contraseña de Windows) de un usuario que emite la consulta para conectarse a un servidor vinculado cuando existen todas las condiciones siguientes:

  • Un usuario está conectado 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 que se ejecutan 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.

Después de que el servidor vinculado haya realizado la autenticación mediante las asignaciones definidas mediante la ejecución de sp_addlinkedsrvlogin en la instancia local de SQL Server, los permisos para objetos individuales de la base de datos remota se determinan mediante 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';  

Or

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';  

Importante

En este ejemplo no se utiliza la autenticación de Windows. Las contraseñas se transmiten sin cifrar. Las contraseñas pueden ser visibles en las definiciones y scripts de origen de datos que se guardan en el 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.

Consulte también

Vistas de catálogo de servidores vinculados (Transact-SQL)
sp_addlinkedserver (Transact-SQL)
sp_droplinkedsrvlogin (Transact-SQL)
Procedimientos almacenados del sistema (Transact-SQL)