Come creo un server collegato in RDS per SQL Server con RDS come origine?

Ultimo aggiornamento: 03/10/2022

Desidero creare un server collegato da un'istanza Amazon Relational Database Service (Amazon RDS) per un'istanza Microsoft SQL Server a SQL Server. In che modo posso farlo?

Breve descrizione

Amazon RDS è un servizio gestito, quindi gli utenti non hanno accesso da amministratori di sistema. La creazione diretta di un server collegato da una GUI genera un errore. Per creare un server collegato, utilizza T-SQL. Le uniche destinazioni supportate sono SQL Server.

Prerequisiti

È necessario disporre di connettività tra RDS per SQL Server e la destinazione SQL Server.

Nota: la password e la configurazione del server collegato rimangono intatte anche dopo la sostituzione dell'host.

Risoluzione

Da istanza RDS per SQL Server a istanza RDS per SQL Server

Una best practice consiste nell'utilizzare il nome DNS durante la creazione di un server collegato con RDS per SQL Server come origine e RDS per SQL Server come destinazione. L'utilizzo del nome DNS impedisce modifiche all'indirizzo IP dovute a sostituzioni di host o modifiche al server.

In Amazon RDS, gli indirizzi IP sono dinamici e gli endpoint sono statici. Quindi, una best practice consiste nell'utilizzare gli endpoint per connettersi all'istanza. Ogni istanza di Amazon RDS ha un endpoint.

Parametri:

  • @server: il nome del tuo server collegato.
  • @datasrc: il nome del tuo endpoint RDS. Per l'istanza on-premise di Amazon Elastic Compute Cloud (Amazon EC2), il tuo indirizzo IP o nome DNS on-premise di EC2.
  • @rmtuser: il nome di accesso per entrare nel database di destinazione.
  • @rmtpassword: la password per il nome di accesso.

Fase 1: connettiti all'istanza RDS per SQL Server

Connettiti all'istanza utilizzando l'accesso principale ed esegui il seguente comando. Assicurati di utilizzare l'endpoint e non l'indirizzo IP. Gli indirizzi IP delle istanze RDS potrebbero cambiare durante la sostituzione dell'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

Fase 2: verifica il server collegato

1.    In Microsoft SQL Server Management Studio (SSMS), connettiti all'istanza RDS.

2.    Nel menu Visualizza, seleziona Esplora oggetti.

3.    Seleziona Oggetti server, Server collegati.

4.    Fai clic con il pulsante destro del mouse sul nome del server e seleziona Verifica la connessione.

Fase 3: esegui le query sul server collegato

Esegui la seguente query:

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

Istanza RDS per SQL Server su un'istanza EC2 di SQL Server o un SQL Server on-premise

Fase 1: crea il server collegato

Crea il server collegato con RDS per SQL Server come origine a SQL Server su un'istanza EC2 o su un SQL Server on-premise.

Esegui i seguenti comandi per creare il server collegato utilizzando l'indirizzo IP del server remoto:

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

Esegui i seguenti comandi per creare il server collegato utilizzando il nome DNS del server remoto:

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

Fase 2: verifica il server collegato

1.    In Microsoft SQL Server Management Studio (SSMS), connettiti all'istanza RDS.

2.    Nel menu Visualizza, seleziona Esplora oggetti.

3.    Seleziona Oggetti server, Server collegati.

4.    Fai clic con il pulsante destro del mouse sul nome del server e seleziona Verifica la connessione.

Fase 3: esegui le query sul server collegato

Esegui la seguente query:

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

Configura il server collegato utilizzando l'autenticazione di Microsoft Windows

Nota: la configurazione di un server collegato da RDS per SQL Server a un'istanza EC2 o a un server SQL on-premise utilizzando l'autenticazione di Windows non è supportata.

Prerequisiti

  • È necessario che il dominio sia stato creato e collegato ad AWS Managed Microsoft AD.
  • L'istanza EC2 SQL Server di origine e RDS SQL Server di destinazione devono disporre di connettività.

Fase 1: configura il server collegato da EC2 o SQL Server on-premise a RDS per SQL Server utilizzando l'autenticazione di Windows

1.    Accedi con i dati di accesso del tuo dominio ed esegui la seguente query per creare il server collegato.

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

Fase 2: verifica il server collegato

1.    In Microsoft SQL Server Management Studio (SSMS), connettiti all'istanza RDS.

2.    Nel menu Visualizza, seleziona Esplora oggetti.

3.    Seleziona Oggetti server, Server collegati.

4.    Fai clic con il pulsante destro del mouse sul nome del server e seleziona Verifica la connessione.

Fase 3: esegui le query sul server collegato

Esegui la seguente query:

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

Risoluzione dei problemi

Potresti ricevere il seguente messaggio di errore quando ti connetti dal client:

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

Questo errore è causato da un "doppio salto". Un doppio salto si verifica quando un computer si connette a un altro per poi connettersi a un terzo. Potrebbero verificarsi doppi salti nei seguenti scenari:

  • Non esiste una configurazione del nome dell'entità servizio (SPN) per permettere ad AWS Managed AD di elaborare l'autenticazione tra il client e l'istanza EC2.
  • Il server collegato è configurato utilizzando un endpoint che non proviene dal tuo dominio, ad esempio l'endpoint dell'istanza RDS. Il metodo di autenticazione sia per EC2 che per RDS deve essere KERBEROS.

Per risolvere il problema, effettua la seguente operazione:

Fase 1. Controlla il metodo di autenticazione per assicurarti che KERBEROS sia stato selezionato durante la connessione a RDS e a EC2

Esegui la seguente query utilizzando i dati di accesso al dominio dal client:

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

Fase 2: correggi gli SPN per l'account del servizio SQL Server che fa parte del tuo dominio

1.    In Utenti e computer di Active Directory, seleziona YourDomain.com, YourDomain, Utenti.

2.    Fai clic con il pulsante destro del mouse su YourServiceAccount per visualizzare le proprietà.

3.    Nella scheda Delega, scegli Considera attendibile questo utente per la delega a qualsiasi servizio (solo Kerberos), quindi seleziona Ok.

4.    Riavvia il servizio SQL Server sull'istanza EC2 o su SQL Server on-premise.

5.     Aggiungi l'SPN per l'account del servizio come mostrato nel seguente comando di esempio. Sostituisci YourDomainName\ServiceAccountName e il dominio Ec2name con i valori corretti per il tuo dominio.

setspn -A MSSQLSvc/Ec2name.domain.com YourDomainName\ServiceAccountName
setspn -A MSSQLSvc/Ec2name.domain.com:1433 YourDomainName\ServiceAccountName

6.    Esegui il seguente comando per verificare gli SPN appena creati:

setspn -l YourDomainName\ServiceAccountName

Fase 3: ricrea il server collegato utilizzando l'endpoint RDS YourDomain.com

1.    Esegui la seguente query in RDS per SQL Server per recuperare il nome del server:

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

2.    Nell'output del comando precedente, controlla la colonna del nome del server per verificare l'SPN, come mostrato nell'esempio seguente.

setspn -l YourServerName

L'output del comando precedente mostra anche i ServicePrincipalNames registrati per l'istanza RDS, come mostrato nell'esempio seguente:

MSSQLSvc/ YourServerName.yourdomainname.com:1433

3.    Esegui il seguente comando per ricreare il server collegato utilizzando i dati di accesso del dominio. L'origine dei dati è la stessa recuperata dall'output del comando nel passaggio 2.

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

4.    Verifica la connettività dal client.

Nota: attualmente, un server collegato è supportato come destinazione per SQL Server. Questo perché Amazon RDS è un servizio gestito. Non hai accesso al sistema operativo per installare ODBC aggiuntivi o i driver necessari per connettere diversi server di database come Oracle, MYSQL, PostgreSQL.

Per server collegati eterogenei, puoi utilizzare RDS Custom per SQL Server.


Questo articolo è stato utile?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?