sql >> Base de Datos >  >> RDS >> Sqlserver

Agregar un inicio de sesión de servidor vinculado en SQL Server (ejemplo de T-SQL)

En este artículo, creo un inicio de sesión para un servidor vinculado en SQL Server. En este caso, uso Transact-SQL (en lugar de usar una GUI como SSMS).

Para crear un inicio de sesión para el servidor vinculado, utilice el sp_addlinkedsrvlogin procedimiento almacenado del sistema.

Sintaxis

La sintaxis es así:

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

El siguiente ejemplo demuestra cómo funciona esto. Para obtener una explicación más detallada de cada argumento, consulte la documentación oficial de Microsoft.

Ejemplo 1:agregue un inicio de sesión para el servidor vinculado

Aquí hay un ejemplo de cómo agregar un inicio de sesión de SQL Server llamado Maggie para un servidor vinculado llamado Homer:

EXEC sp_addlinkedsrvlogin 
    @rmtsrvname=N'Homer', 
    @useself=N'FALSE', 
    @locallogin=NULL, 
    @rmtuser=N'Maggie', 
    @rmtpassword=N'BigStrong#Passw0rd';

Ejecute esto en el servidor local después de haber creado el servidor vinculado. Necesitará un inicio de sesión correspondiente con las mismas credenciales en el servidor remoto real.

Ejemplo 2:incluir el servidor vinculado

En aras de la exhaustividad, aquí está de nuevo, pero esta vez primero creo el servidor vinculado:

EXEC sp_addlinkedserver 
    @server=N'Homer', 
    @srvproduct=N'', 
    @provider=N'MSOLEDBSQL', 
    @datasrc=N'172.17.0.2',
    @catalog='Music';

EXEC sp_addlinkedsrvlogin 
    @rmtsrvname=N'Homer', 
    @useself=N'FALSE', 
    @locallogin=NULL, 
    @rmtuser=N'Maggie', 
    @rmtpassword=N'BigStrong#Passw0rd';

Siempre que el servidor vinculado real (remoto) tenga un inicio de sesión con las mismas credenciales, el servidor local podrá iniciar sesión en el servidor vinculado.

Ejemplo 3:agregue el inicio de sesión/usuario en el servidor remoto

Como se mencionó, deberá asegurarse de que haya un inicio de sesión correspondiente en el servidor remoto. También deberá asegurarse de que este inicio de sesión se asigne a un usuario de la base de datos con los permisos adecuados.

Entonces, en este caso, podríamos crear un inicio de sesión en el servidor remoto saltando al servidor remoto y ejecutando esto:

CREATE LOGIN Maggie
    WITH PASSWORD = 'BigStrong#Passw0rd';

USE Music;
CREATE USER Maggie FOR LOGIN Maggie;

GRANT SELECT ON DATABASE::Music TO Maggie; 

Esto crea un inicio de sesión llamado Maggie y un usuario de base de datos correspondiente llamado Maggie. También otorga SELECT permisos a Maggie para la base de datos de Música.

Ahora que lo hice, cualquier consulta distribuida que utilice este inicio de sesión se limitará a la base de datos de Música.

Una alternativa al uso de GRANT SELECT ON DATABASE , es agregar al usuario al db_datareader rol de base de datos fijo, o quizás a un rol personalizado.

Si creó el servidor vinculado antes de crear los inicios de sesión y los usuarios de la base de datos en el servidor remoto, es posible que deba eliminar el servidor vinculado y volver a crearlo. Si es así, puedes dejarlo así:

EXEC sp_dropserver 'Homer', 'droplogins';

Una vez soltado, puede crear el servidor vinculado y su inicio de sesión asociado nuevamente.

¿Realmente necesito un inicio de sesión de servidor vinculado?

Es posible que ni siquiera necesite agregar un inicio de sesión como en el ejemplo anterior.

Cuando crea por primera vez un servidor vinculado en SQL Server, se crea automáticamente una asignación predeterminada entre todos los inicios de sesión en el servidor local y los inicios de sesión remotos en el servidor vinculado. SQL Server usa las credenciales del inicio de sesión local cuando se conecta al servidor vinculado en nombre del inicio de sesión.

Entonces, si su inicio de sesión local tiene un inicio de sesión correspondiente en el servidor vinculado, con las mismas credenciales y tiene los permisos adecuados, está listo para comenzar. No es necesario agregar un inicio de sesión para el servidor vinculado.

Habiendo dicho eso, puede tener otras razones para agregar un inicio de sesión separado, como agregarlo para otros usuarios.

También es posible que desee crear una asignación de inicio de sesión para un solo usuario local, en cuyo caso puede usar @locallogin argumento para especificar el inicio de sesión local que se asignará.

Consulte Cómo funcionan los inicios de sesión en servidores vinculados para ver ejemplos de varios inicios de sesión locales que intentan acceder a un inicio de sesión de servidor vinculado en diferentes escenarios.