¿Cómo puedo crear un servidor vinculado en RDS para SQL Server con RDS como origen?

7 minutos de lectura
0

Quiero crear un servidor vinculado desde una instancia de Amazon Relational Database Service (Amazon RDS) para Microsoft SQL Server a SQL Server.

Breve descripción

Amazon RDS es un servicio administrado, por lo que los usuarios no tienen acceso como administradores del sistema. Crear directamente un servidor vinculado desde una GUI produce un error. Para crear un servidor vinculado, utilice T-SQL.

Como requisito previo, debe tener conectividad entre RDS para SQL Server y el SQL Server de destino.

**Nota:**La contraseña y la configuración del servidor enlazado permanecen intactas incluso después de reemplazar el host.

Resolución

RDS para instancia de SQL Server a RDS para instancia de SQL Server

Al crear un servidor vinculado con RDS para SQL Server como origen y RDS para SQL Server como destino, utilice el nombre DNS. Esto evita los cambios de dirección IP debidos a reemplazos de host o cambios de servidor.

En Amazon RDS, las direcciones IP son dinámicas y los puntos de conexión son estáticos. Por lo tanto, se recomienda utilizar puntos de conexión para conectarse a la instancia. Cada instancia de Amazon RDS tiene un punto de conexión. Utilice los parámetros siguientes:

  • @server: El nombre del servidor vinculado.
  • @datasrc: El nombre de su punto de conexión de RDS. Para la instancia local de Amazon Elastic Compute Cloud (Amazon EC2), su dirección IP local o nombre DNS de EC2.
  • @rmtuser: El nombre de inicio de sesión que tiene acceso a la base de datos de destino.
  • @rmtpassword: La contraseña para el nombre de inicio de sesión.

Conectarse a la instancia de RDS para SQL Server

Conéctese a la instancia mediante el inicio de sesión maestro y, a continuación, ejecute el siguiente comando. Asegúrese de utilizar el punto de conexión y no la dirección IP. Las direcciones IP de las instancias de RDS pueden cambiar durante el reemplazo de un host.

EXEC master .dbo.sp_addlinkedserver @server = N'LinkedServerRDSSQL', @srvproduct= N'', @provider= N'SQLNCLI', @datasrc= N'SQL-2019.ckeixtynaaaj.us-east-1.rds.amazonaws.com'
go
EXEC master .dbo.sp_addlinkedsrvlogin @rmtsrvname=N'LinkedServerRDSSQL' ,@useself=N'False' ,@locallogin=NULL,@rmtuser =N'linkedserverloginname',@rmtpassword='YourStrongPassword'
go

Probar el servidor vinculado

  1. En Microsoft SQL Server Management Studio (SSMS), conéctese a la instancia de RDS.
  2. En el menú Ver, seleccione Explorador de objetos.
  3. Seleccione Objetos de servidor, Servidores vinculados.
  4. Haga clic con el botón derecho en el nombre del servidor y, a continuación, seleccione Probar la conexión.

Consultar el servidor vinculado

Ejecute la siguiente consulta:

select * from [LinkedServerName].[Databasename].[schemaname].[tablename]

RDS para una instancia de SQL Server a una instancia de SQL Server de EC2 o a un SQL Server local

Crear el servidor vinculado

Cree el servidor vinculado con RDS para SQL Server como origen a SQL Server en una instancia EC2 o a un SQL Server local.

Para crear el servidor vinculado con la dirección IP del servidor remoto, ejecute los siguientes comandos:

EXEC master .dbo.sp_addlinkedserver @server = N'LinkedServerRDSSQL', @srvproduct= N'', @provider= N'SQLNCLI', @datasrc= N'10.0.0.152'
Go
EXEC master .dbo.sp_addlinkedsrvlogin @rmtsrvname=N'LinkedServerRDSSQL' ,@useself=N'False' ,@locallogin=NULL,@rmtuser =N'linkedserverloginname',@rmtpassword='YourStrongPassword'
Go

Para crear el servidor vinculado con el nombre DNS del servidor remoto, ejecute los siguientes comandos:

EXEC master .dbo.sp_addlinkedserver @server = N'LinkedServerRDSSQL', @srvproduct= N'', @provider= N'SQLNCLI', @datasrc= N'ServerName.datacenter.mycompany.com'
Go
EXEC master .dbo.sp_addlinkedsrvlogin @rmtsrvname=N'LinkedServerRDSSQL' ,@useself=N'False' ,@locallogin=NULL,@rmtuser =N'linkedserverloginname',@rmtpassword='YourStrongPassword'
go

Probar el servidor vinculado

  1. En Microsoft SQL Server Management Studio (SSMS), conéctese a la instancia de RDS.
  2. En el menú Ver, seleccione Explorador de objetos.
  3. Seleccione Objetos de servidor, Servidores vinculados.
  4. Haga clic con el botón derecho en el nombre del servidor y, a continuación, seleccione Probar la conexión.

Consultar el servidor vinculado

Ejecute la siguiente consulta:

select * from [LinkedServerName].[Databasename].[schemaname].[tablename]

Configurar el servidor vinculado mediante la autenticación de Microsoft Windows

Nota: No puede configurar un servidor vinculado desde RDS para SQL Server a una instancia EC2 o a un SQL Server local con autenticación de Windows.

Requisitos previos

  • Debe tener el dominio creado y unido a Microsoft AD administrado por AWS.
  • La instancia de SQL Server EC2 de origen y RDS SQL Server de destino deben tener conectividad.

Configurar el servidor vinculado desde un servidor EC2 o SQL Server local a RDS para SQL Server mediante la autenticación de Window

  • Inicie sesión con el nombre de usuario de su dominio y, a continuación, ejecute la siguiente consulta para crear el servidor vinculado.
USE [master]
GO
EXEC sp_addlinkedserver    @server=N'LinkedServerToRDSInstance',@srvproduct=N'',@provider=N'SQLNCLI',@datasrc=N'EndpointName';
GO
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'LinkedServerToRDSInstance', @locallogin = NULL , @useself = N'True'
GO

Probar el servidor vinculado

  1. En Microsoft SQL Server Management Studio (SSMS), conéctese a la instancia de RDS.
  2. En el menú Ver, seleccione Explorador de objetos.
  3. Seleccione Objetos de servidor, Servidores vinculados.
  4. Haga clic con el botón derecho en el nombre del servidor y seleccione Probar la conexión.

Consultar el servidor vinculado

Ejecute la siguiente consulta:

select * from [LinkedServerName].[Databasename].[schemaname].[tablename]

Solucionar problemas

Al conectarse desde el cliente, es posible que reciba el siguiente mensaje de error:

Msg 18456, Level 14, State 1, Line 21
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'

Este error se produce a partir de un «salto doble». Se produce un salto doble cuando un equipo se conecta a otro equipo para conectarse a un tercer equipo. Los saltos dobles pueden producirse en los siguientes escenarios:

  • No existe una configuración de nombres de entidad principal de servicio (SPN) para que AWS Managed AD procese la autenticación entre el cliente y la instancia de EC2.
  • El servidor vinculado está configurado con un punto de conexión que no es de su dominio, como el punto de conexión de la instancia de RDS. El método de autenticación tanto para EC2 como para RDS debe ser KERBEROS.

Para resolver este problema, siga estos pasos:

Comprobar el método de autenticación para confirmar que se ha seleccionado KERBEROS al conectarse a RDS y EC2

Ejecute la siguiente consulta con el inicio de sesión de dominio del cliente:

select @@servername as ServerName, session_id,net_transport, auth_scheme from sys.dm_exec_connections where session_id= @@spid;

Corregir los SPN de la cuenta de servicio de SQL Server que forma parte de su dominio

  1. En Usuarios y equipos de Active Directory, seleccione example.com, example (nombre de dominio), Usuarios.
  2. Para ver las propiedades, haga clic con el botón derecho en YourServiceAccount.
  3. En la pestaña Delegación, elija Confiar en este usuario para delegarle cualquier servicio (solo Kerberos) y seleccione Aceptar.
  4. Reinicie el servicio de SQL Server en la instancia EC2 o en el SQL Server local.
  5. Agregue el SPN de la cuenta de servicio como se muestra en el siguiente comando de ejemplo. Sustituya example por su nombre de dominio. Sustituya ServiceAccountName y el dominio Ec2name por los valores correctos de su dominio:
    setspn -A MSSQLSvc/Ec2name.domain.com example\ServiceAccountName
    setspn -A MSSQLSvc/Ec2name.domain.com:1433 example\ServiceAccountName

Para comprobar los SPN recién creados, ejecute el siguiente comando:

setspn -l example\ServiceAccountName

Volver a crear el servidor vinculado mediante el punto de conexión de RDS example.com

  1. Para recuperar el nombre del servidor, ejecute la siguiente consulta en RDS para SQL Server:

    select @@servername as ServerName, session_id,net_transport, auth_scheme from sys.dm_exec_connections where session_id= @@spid;
  2. En el resultado del comando anterior, compruebe la columna del nombre del servidor para comprobar el SPN:

    setspn -l YourServerName
  3. El resultado también muestra los ServicePrincipalNames registrados para su instancia de RDS, como se muestra en el siguiente ejemplo:

    MSSQLSvc/ YourServerName.example.com:1433
  4. Para volver a crear el servidor vinculado con el inicio de sesión del dominio, ejecute el siguiente comando. La fuente de datos es la misma que recuperó del resultado del comando en el paso 2:

    USE [master]
    GO
    EXEC sp_addlinkedserver    @server=N'LinkedServerToRDSInstance',@srvproduct=N'',@provider=N'SQLNCLI',@datasrc=N'YourServerName.example,com';
    GO
    EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'LinkedServerToRDSInstance', @locallogin = NULL , @useself = N'True'
    GO

Pruebe la conectividad desde el cliente.

Para servidores vinculados heterogéneos, puede utilizar RDS Custom para SQL Server.

Información relacionada

Implementar servidores vinculados con Amazon RDS para Microsoft SQL Server