Come posso creare un server collegato con RDS per SQL Server con RDS come origine?

7 minuti di lettura
0

Desidero creare un server collegato da un'istanza Amazon Relational Database Service (Amazon RDS) per Microsoft SQL Server a SQL Server.

Breve descrizione

Amazon RDS è un servizio gestito, quindi gli utenti non dispongono dell'accesso da amministratore di sistema. La creazione diretta di un server collegato da una GUI genera un errore. Per creare un server collegato, usa T-SQL.

Come prerequisito, è necessario disporre della connettività tra RDS for SQL Server e SQL Server di destinazione.

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 RDS per istanza di SQL Server

Quando si crea un server collegato con RDS per SQL Server come origine, e RDS per SQL Server come destinazione, utilizzare il nome DNS. In questo modo si evitano modifiche all'indirizzo IP dovute alla sostituzione dell'host o al cambio del server.

In Amazon RDS, gli indirizzi IP sono dinamici e gli endpoint sono statici. Pertanto, è consigliabile utilizzare gli endpoint per connettersi all'istanza. Ogni istanza Amazon RDS ha un endpoint. Utilizza i seguenti 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 locale EC2 o il nome DNS.
  • @rmtuser: Il nome di accesso che ha accesso al database di destinazione.
  • @rmtpassword: La password per il nome di accesso.

Connettersi all'istanza RDS per SQL Server

Connettiti all'istanza utilizzando il login principale, quindi esegui il comando seguente. 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

Testa il server collegato

  1. In Microsoft SQL Server Management Studio (SSMS), connettiti all'istanza RDS.
  2. Nel menu Visualizza, selezionare Object Explorer.
  3. Seleziona Oggetti server, Server collegati.
  4. Fai clic con il pulsante destro del mouse sul nome del server, quindi seleziona Verifica la connessione.

Interroga il server collegato

Esegui la seguente query:

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

Da un'istanza RDS per SQL Server a un'istanza SQL Server EC2 o a una SQL Server on-premise

Crea il server collegato

Crea il server collegato con RDS per SQL Server come origine per SQL Server su un'istanza EC2 o su un SQL Server locale.

Per creare il server collegato con l'indirizzo IP del server remoto, esegui i seguenti comandi:

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

Per creare il server collegato utilizzando il nome DNS del server remoto, esegui i seguenti comandi:

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

Testa il server collegato

  1. In Microsoft SQL Server Management Studio (SSMS), connettiti all'istanza RDS.
  2. Nel menu Visualizza, selezionare Object Explorer.
  3. Seleziona Oggetti server, Server collegati.
  4. Fai clic con il pulsante destro del mouse sul nome del server, quindi seleziona Verifica la connessione.

Interroga il server collegato

Esegui la seguente query:

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

Configurazione del server collegato utilizzando l'autenticazione di Microsoft Windows

Nota: Non è possibile configurare un server collegato da RDS per SQL Server a un'istanza EC2 o a un SQL Server locale con autenticazione Windows.

Prerequisiti

  • Devi aver creato e aggiunto il dominio con AWS Managed Microsoft AD.
  • L'istanza SQL Server EC2 di origine e il server SQL RDS di destinazione devono disporre di connettività.

Configurazione del server collegato da EC2 o SQL Server locale a RDS per SQL Server utilizzando l'autenticazione di Windows

  • Accedi con il tuo nome di dominio, quindi 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

Testa il server collegato

  1. In Microsoft SQL Server Management Studio (SSMS), connettiti all'istanza RDS.
  2. Nel menu Visualizza, selezionare Object Explorer.
  3. Seleziona Oggetti server, Server collegati.
  4. Fai clic con il pulsante destro del mouse sul nome del server, quindi seleziona Verifica la connessione.

Interroga il server collegato

Esegui la seguente query:

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

Risoluzione problemi

Quando ti connetti dal client, potresti ricevere il seguente messaggio di errore:

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

Questo errore si verifica a causa di un «doppio salto». Un double hop si verifica quando un computer si connette a un altro computer per connettersi a un terzo computer. Questo errore può verificarsi nei seguenti casi:

  • Non esiste una configurazione del nome principale del servizio (SPN) per AWS Managed AD per elaborare l'autenticazione tra il cliente e l'istanza EC2.
  • Il server collegato è configurato con un endpoint che non appartiene al tuo dominio, ad esempio l'endpoint dell'istanza RDS. Il metodo di autenticazione per EC2 e RDS deve essere KERBEROS.

Per risolvere questo problema, completa i seguenti passaggi:

Controlla il metodo di autenticazione per confermare che KERBEROS viene scelto durante la connessione sia a RDS che a EC2

Esegui la seguente query con l'accesso al dominio dal client:

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

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 example.com, esempio (nome di dominio), Utenti.
  2. Per visualizzare le proprietà, fare clic con il pulsante destro del mouse su YourServiceAccount.
  3. Nella scheda Delega, scegli Affidati a questo utente per la delega a qualsiasi servizio (solo Kerberos), quindi seleziona OK.
  4. Riavviare il servizio SQL Server sull'istanza EC2 o su SQL Server locale.
  5. Aggiungi l'SPN per l'account del servizio come mostrato nel seguente comando di esempio. Sostituisci example.com con il tuo nome di dominio. Sostituisci ServiceAccountName e il dominio Ec2name con i valori corretti per il tuo dominio:
    setspn -A MSSQLSvc/Ec2name.domain.com example\ServiceAccountName
    setspn -A MSSQLSvc/Ec2name.domain.com:1433 example\ServiceAccountName

Per verificare gli SPN appena creati, esegui il seguente comando:

setspn -l example\ServiceAccountName

Ricrea il server collegato utilizzando l'endpoint RDS example.com

  1. Per recuperare il nome del server, esegui la seguente query in RDS per SQL 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:

    setspn -l YourServerName
  3. L'output mostra anche i ServicePrincipalNames per l'istanza RDS, come mostrato nell'esempio seguente:

    MSSQLSvc/ YourServerName.example.com:1433
  4. Per ricreare il server collegato con l'accesso al dominio, esegui il comando seguente. L'origine dei dati è la stessa che hai recuperato dall'output del comando nel passaggio 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

Verifica la connettività del client.

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

Informazioni correlate

Implementa server collegati con Amazon RDS per Microsoft SQL Server