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

Eliminar un servidor vinculado en SQL Server usando T-SQL

Este artículo proporciona un ejemplo del uso de Transact-SQL para eliminar un servidor vinculado en SQL Server.

Para eliminar un servidor vinculado, use el sp_dropserver procedimiento almacenado del sistema. Esto elimina un servidor de la lista de servidores remotos y vinculados conocidos en la instancia local de SQL Server. Este procedimiento almacenado acepta dos argumentos:el nombre del servidor y un argumento opcional para eliminar cualquier inicio de sesión asociado con el servidor.

Ejemplo 1:descartar un servidor vinculado y sus inicios de sesión

Aquí hay un ejemplo de cómo eliminar un servidor vinculado y todos los inicios de sesión asociados para ese servidor vinculado. En este caso, el servidor vinculado se llama “Homer”.

EXEC sp_dropserver 'Homer', 'droplogins';

Resultado:

Commands completed successfully.

Al igual que con cualquier procedimiento almacenado, también puede incluir explícitamente los nombres de los argumentos. Sin embargo, esto no cambia el resultado:el servidor vinculado se elimina junto con sus inicios de sesión asociados.

EXEC sp_dropserver 
  @server = 'Homer', 
  @droplogins = 'droplogins';

Resultado:

Commands completed successfully.

Ejemplo 2:eliminar un servidor vinculado sin eliminar sus inicios de sesión

Como se mencionó, los droplogins argumentos es opcional. También puede soltar un servidor vinculado como este:

EXEC sp_dropserver 'Homer';

Sin embargo, si hay inicios de sesión asociados con el servidor vinculado, obtendrá el siguiente error:

Msg 15190, Level 16, State 1, Procedure sp_dropserver, Line 56
There are still remote logins or linked logins for the server 'Homer'.

Lo que significa que deberá agregar los droplogins argumento.

También obtendrá un error si el servidor vinculado está configurado como editor de replicación.

Nuevamente, puede incluir explícitamente los nombres de los argumentos si lo prefiere:

EXEC sp_dropserver 
  @server = 'Homer', 
  @droplogins = NULL;

Resultado:

Msg 15190, Level 16, State 1, Procedure sp_dropserver, Line 56
There are still remote logins or linked logins for the server 'Homer'.

No obtendrá un error si no hay inicios de sesión asociados con el servidor vinculado. Por ejemplo, si crea un servidor vinculado sin usar sp_addlinkedsrvlogin para agregar un inicio de sesión, podrá abandonar el servidor sin usar droplogins argumento. Esto es cierto incluso si se creó una asignación entre su inicio de sesión local y uno en el servidor remoto.

Entonces, si el servidor remoto tiene un inicio de sesión llamado Marge, y ejecuto esto bajo el inicio de sesión de Marge en el local servidor:

EXEC sp_addlinkedserver 
    @server=N'Homer', 
    @srvproduct=N'', 
    @provider=N'MSOLEDBSQL', 
    @datasrc=N'172.17.0.3,1433';

Se crea una asignación entre Marge en el servidor local y Marge en el servidor vinculado. Esto es posible porque ambos inicios de sesión comparten las mismas credenciales. En este caso, no es necesario ejecutar sp_addlinkedsrvlogin para agregar a Marge como inicio de sesión para el servidor vinculado.

Sin embargo, si no hay un inicio de sesión correspondiente para Marge en el servidor vinculado (o si lo hay, pero las credenciales no coinciden), la asignación no se realizará y Marge no podrá acceder al servidor vinculado.

De cualquier manera, ejecutar el siguiente código será exitoso:

EXEC sp_dropserver 
  @server = 'Homer', 
  @droplogins = NULL;

Resultado:

Commands completed successfully.

Esto se completa con éxito para Marge, incluso cuando hay una asignación entre su inicio de sesión local y el servidor vinculado (pero ningún otro inicio de sesión para el servidor vinculado).