sql >> Base de Datos >  >> RDS >> Database

Restringir un servidor vinculado a un único inicio de sesión local (ejemplo de T-SQL)

En este artículo, configuro un servidor vinculado en SQL Server para que solo un único inicio de sesión local pueda acceder a él. Para hacer esto, elimino las asignaciones que se crean automáticamente cuando creo el servidor vinculado, antes de agregar una asignación de inicio de sesión para el inicio de sesión local único.

Configurar el servidor vinculado y la asignación de inicio de sesión

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

EXEC sp_droplinkedsrvlogin 'Homer', NULL;

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

Este ejemplo crea un servidor vinculado llamado Homer. Luego elimina todas las asignaciones de inicio de sesión que se crean automáticamente, antes de agregar un inicio de sesión para un inicio de sesión local específico llamado Milhouse.

Para nuestros propósitos, la línea relevante en este ejemplo es @locallogin='Milhouse' . Esta es la línea que especifica que la asignación de inicio de sesión debe crearse para el inicio de sesión local especificado (en este caso, 'Milhouse').

Ahora Milhouse será el único inicio de sesión local que podrá conectarse al servidor vinculado.

Cómo funciona

Cuando usa sp_addlinkedserver para crear 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.

Esto es excelente si realmente desea estas asignaciones:le evita crearlas explícitamente. Pero si no los quiere, deberá usar sp_droplinkedsrvlogin para eliminarlos. Eso es lo que hice en el ejemplo anterior.

Una vez que haya descartado todas las asignaciones de inicio de sesión creadas automáticamente, puede usar sp_addlinkedsrvlogin para agregar una asignación para un inicio de sesión local específico.

Permitir que todos los inicios de sesión locales compartan la asignación de inicio de sesión

También puede configurarlo para que todos los inicios de sesión locales usen la misma asignación de inicio de sesión (para que no se limite solo a Milhouse, por ejemplo). Además, en lugar de tener cada inicio de sesión local asignado a un inicio de sesión remoto correspondiente, pueden usar el inicio de sesión que configure para el servidor vinculado. Para hacer esto, simplemente configure @locallogin=NULL . Esto permite que todos los inicios de sesión locales se conecten al servidor vinculado, ya sea que tengan o no un inicio de sesión remoto correspondiente en el servidor vinculado.

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.