Gestionar servidores vinculados

En esta página se explica cómo gestionar servidores vinculados en una instancia de Cloud SQL, lo que incluye registrar una instancia, añadir un servidor vinculado y consultar un servidor vinculado.

Registrar tu instancia para permitir servidores vinculados

Para añadir la marca cloudsql enable linked servers a tu instancia, usa el siguiente comando:

gcloud sql instances patch INSTANCE_NAME --database-flags="cloudsql enable linked servers"=on

Sustituye INSTANCE_NAME por el nombre de la instancia que quieras usar para vincular servidores.

Para obtener más información, consulta Configurar marcas de bases de datos.

Añadir un servidor vinculado

Para añadir un servidor vinculado, ejecuta el comando sp_addlinkedserver de Transact-SQL:

EXEC master.dbo.sp_addlinkedserver
    @server = N'LINKED_SERVER_NAME',
    @srvproduct=N'',
    @provider=N'SQLNCLI',
    @datasrc=N'TARGET_SERVER_ID'

Haz los cambios siguientes:

  • LINKED_SERVER_NAME con el nombre del servidor vinculado que se va a crear.
  • TARGET_SERVER_ID con el nombre de red, el nombre DNS o la dirección IP del servidor vinculado. En el nombre de la instancia, usa el formato servername\instancename. Si tu instancia usa un puerto no estándar, añade el número de puerto. Por ejemplo, servername\instancename, 8080.

Para añadir una asignación de usuario a un usuario que ha iniciado sesión, ejecuta el siguiente comando:

EXEC master.dbo.sp_addlinkedsrvlogin
    @rmtsrvname=N'LINKED_SERVER_NAME',
    @useself=N'True'

Sustituye LINKED_SERVER_NAME por el nombre del servidor vinculado.

Para crear o actualizar el inicio de sesión y la contraseña remotos predeterminados, y aplicarlos a todos los inicios de sesión locales, ejecuta el siguiente comando:

EXEC master.dbo.sp_addlinkedsrvlogin
    @rmtsrvname=N'LINKED_SERVER_NAME',
    @useself=N'False',
    @locallogin=N'LOGIN',
    @rmtuser=N'USER_ID',
    @rmtpassword='PASSWORD';

Haz los cambios siguientes:

  • LINKED_SERVER_NAME con el nombre del servidor vinculado.
  • LOGIN con el inicio de sesión del servidor local. locallogin es sysname, con el valor predeterminado 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 es un inicio de sesión de SQL Server o un inicio de sesión de Windows. Si usas un inicio de sesión de Windows, debe tener acceso a SQL Server directamente o a través de su pertenencia a un grupo de Windows que tenga acceso.
  • USER_ID cuando el usuario inicie sesión.
  • PASSWORD con la contraseña del usuario.

Añadir un servidor vinculado con una conexión cifrada

Para añadir un servidor vinculado mediante una conexión cifrada, ejecuta el comando Transact-SQL sp_addlinkedserver:

EXEC master.dbo.sp_addlinkedserver
    @server = N'LINKED_SERVER_NAME',
    @srvproduct=N'',
    @provider=N'SQLNCLI',
    @datasrc=N'TARGET_SERVER_ID,
    @provstr=N'Encrypt=yes;'

Haz los cambios siguientes:

  • LINKED_SERVER_NAME con el nombre del servidor vinculado que se va a crear.
  • TARGET_SERVER_ID con el nombre del servidor de destino o la dirección IP y el número de puerto del servidor de destino.

Si el nombre del servidor es diferente del nombre del certificado, debe indicar que SQL Server puede confiar en el certificado del servidor. Para actualizar la cadena del proveedor, ejecuta el siguiente comando:

EXEC master.dbo.sp_addlinkedserver
    @server = N'LINKED_SERVER_NAME',
    @srvproduct=N'',
    @provider=N'SQLNCLI',
    @datasrc=N'TARGET_SERVER_ID,
    @provstr=N'Encrypt=yes;TrustServerCertificate=yes;'

Haz los cambios siguientes:

  • LINKED_SERVER_NAME con el nombre del servidor vinculado que se va a crear.
  • TARGET_SERVER_ID con el nombre del servidor de destino o la dirección IP y el número de puerto del servidor de destino.

Consultas de servidor vinculado

Cloud SQL admite el uso de nombres de cuatro partes para consultar servidores vinculados (nombre del servidor, nombre de la base de datos, nombre del esquema y nombre del objeto), además de los siguientes comandos:

  • OPENQUERY ejecuta una consulta en un servidor especificado.
  • EXECUTE permite ejecutar SQL dinámico en un servidor vinculado.

Para obtener más información, consulta Comparar las opciones de ejecución remota de consultas.

Habilitar llamadas a procedimiento remoto en un servidor vinculado

Las llamadas a procedimientos remotos (RPC) te permiten ejecutar procedimientos almacenados en servidores vinculados. Para añadir RPC, ejecuta el comando Transact-SQL sp_serveroption con un argumento RPC. Hay dos argumentos de RPC:

  • rpc habilita RPC desde el servidor especificado.
  • rpc out habilita RPC en el servidor especificado.

Usa el siguiente comando sp_serveroption con el argumento rpc para habilitar la RPC desde LINKED_SERVER_NAME:

EXEC sp_serveroption
    @server='LINKED_SERVER_NAME',
    @optname='rpc',
    @optvalue='TRUE'

Sustituye LINKED_SERVER_NAME por el nombre del servidor vinculado.

Usa el siguiente comando sp_serveroption con el argumento rpc out para habilitar RPC:

EXEC sp_serveroption
    @server='LINKED_SERVER_NAME',
    @optname='rpc out',
    @optvalue='TRUE'

Sustituye LINKED_SERVER_NAME por el nombre del servidor vinculado.

Quitar la asignación de usuario de un servidor vinculado

Para quitar una asignación de usuario que hayas añadido anteriormente, ejecuta el siguiente comando:

EXEC master.dbo.sp_droplinkedsrvlogin
    @rmtsrvname=N'LINKED_SERVER_NAME',
    @locallogin=N'LOGIN';

Haz los cambios siguientes:

  • LINKED_SERVER_NAME con el nombre del servidor vinculado que se va a eliminar.
  • LOGIN con el inicio de sesión del servidor local. locallogin es sysname, con el valor predeterminado 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 es un inicio de sesión de SQL Server o un inicio de sesión de Windows. Si usas un inicio de sesión de Windows, debe tener acceso a SQL Server directamente o a través de su pertenencia a un grupo de Windows que tenga acceso.

Impedir que una instancia registrada permita servidores vinculados

Para quitar servidores vinculados, sigue estos pasos:

  • Elimina los servidores vinculados con el procedimiento almacenado sp_dropserver de Transact-SQL.
  • Quita la marca cloudsql enable linked servers para eliminar una instancia registrada.

    gcloud sql instances patch INSTANCE_NAME --database-flags="cloudsql enable linked servers"=off

    Sustituye INSTANCE_NAME por el nombre de la instancia en la que quieras quitar los servidores vinculados.

    También puedes ejecutar el siguiente comando para borrar todas las marcas de la base de datos:

    gcloud sql instances patch INSTANCE_NAME --clear-database-flags

    Sustituye INSTANCE_NAME por el nombre de la instancia en la que quieras quitar los servidores vinculados.

Solucionar problemas

Mensaje de error Solución de problemas
Msg 7411, Level 16, State 1, Line 25

Server 'LINKED_SERVER_NAME' is not configured for DATA ACCESS.
La opción DataAccess está inhabilitada. Ejecuta el siguiente comando para habilitar el acceso a los datos:
EXEC sp_serveroption
    @server='LINKED_SERVER_NAME',
    @optname='data access',
    @optvalue='TRUE'

Sustituye LINKED_SERVER_NAME por el nombre del servidor vinculado.

Access to the remote server is denied because no login-mapping exists. (Microsoft SQL Server, Error: 7416) Si tienes este problema al establecer una conexión cifrada, debes probar otra forma de proporcionar el ID de usuario cuando accedas al servidor vinculado. Para ello, ejecuta el siguiente comando:
EXEC master.dbo.sp_addlinkedserver
   @server = N'LINKED_SERVER_NAME',
   @srvproduct= N'',
   @provider= N'SQLNCLI',
   @datasrc= N'TARGET_SERVER_ID',
   @provstr= N'Encrypt=yes;TrustServerCertificate=yes;User ID=USER_ID'

Sustituye lo siguiente:

  • LINKED_SERVER_NAME con el nombre del servidor vinculado.
  • TARGET_SERVER_ID con el nombre del servidor de destino o la dirección IP y el número de puerto del servidor de destino.
  • USER_ID cuando el usuario inicie sesión.

Siguientes pasos