Wie erstelle ich einen Verbindungsserver in RDS for SQL Server mit der Quelle als RDS?

Lesedauer: 7 Minute
0

Ich möchte einen Verbindungsserver von einer Amazon Relational Database Service (Amazon RDS) für Microsoft SQL Server-Instance zu SQL Server erstellen.

Kurzbeschreibung

Amazon RDS ist ein verwalteter Service, sodass Benutzer keinen Systemadministratorzugriff haben. Das direkte Erstellen eines Verbindungsservers über eine GUI führt zu einem Fehler. Verwenden Sie T-SQL, um einen Verbindungsserver zu erstellen.

Als Voraussetzung müssen Sie über eine Konnektivität zwischen RDS for SQL Server und dem Ziel-SQL-Server verfügen.

Hinweis: Das Passwort und die Konfiguration des Verbindungsservers bleiben auch nach einem Host-Austausch erhalten.

Behebung

RDS für SQL Server-Instance zu RDS für SQL Server-Instance

Wenn Sie einen Verbindungsserver mit RDS for SQL Server als Quelle für RDS for SQL Server als Ziel erstellen, verwenden Sie den DNS-Namen. Dadurch werden IP-Adressänderungen aufgrund von Host-Austausch oder Serveränderungen verhindert.

In Amazon RDS sind IP-Adressen dynamisch und Endpunkte sind statisch. Daher ist es eine bewährte Methode, Endpunkte zu verwenden, um eine Verbindung zu Ihrer Instance herzustellen. Jede Amazon RDS-Instance hat einen Endpunkt. Siehe die folgenden Parameter:

  • @server: Name Ihres Verbindungsservers.
  • @datasrc: Ihr RDS-Endpunktname. Für die Amazon Elastic Compute Cloud (Amazon EC2) On-Premises-Instance Ihre lokale EC2-IP-Adresse oder Ihr DNS-Name.
  • @rmtuser: Der Anmeldename, der Zugriff auf die Zieldatenbank hat.
  • @rmtpassword: Das Passwort für den Anmeldenamen.

Verbindung zur RDS for SQL Server-Instance herstellen

Stellen Sie mithilfe des Master-Logins eine Verbindung mit der Instance her und führen Sie dann den folgenden Befehl aus. Stellen Sie sicher, dass Sie den Endpunkt und nicht die IP-Adresse verwenden. Die IP-Adressen von RDS-Instances können sich während eines Host-Austauschs ändern.

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

Testen des Verbindungsservers

  1. Stellen Sie in Microsoft SQL Server Management Studio (SSMS) eine Verbindung zur RDS-Instance her.
  2. Wählen Sie im Menü Ansicht die Option Objekt-Explorer aus.
  3. Wählen Sie Serverobjekte, Verbindungsserver aus.
  4. Klicken Sie mit der rechten Maustaste auf Ihren Servernamen und wählen Sie dann Verbindung testen aus.

Abfragen des Verbindungsservers

Führen Sie die folgende Abfrage aus:

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

RDS for SQL Server-Instance zu einer EC2 SQL Server-Instance oder einem On-Premises-SQL-Server

Erstellen des Verbindungsservers

Erstellen Sie den Verbindungsserver mit RDS for SQL Server als Quelle für SQL Server auf einer EC2-Instance oder für einen lokalen SQL Server.

Führen Sie die folgenden Befehle aus, um den Verbindungsserver mit der IP-Adresse für den Remoteserver zu erstellen:

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

Führen Sie die folgenden Befehle aus, um den Verbindungsserver mit dem DNS-Namen für den Remoteserver zu erstellen:

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

Testen des Verbindungsservers

  1. Stellen Sie in Microsoft SQL Server Management Studio (SSMS) eine Verbindung zur RDS-Instance her.
  2. Wählen Sie im Menü Ansicht die Option Objekt-Explorer aus.
  3. Wählen Sie Serverobjekte, Verbindungsserver aus.
  4. Klicken Sie mit der rechten Maustaste auf Ihren Servernamen und wählen Sie dann Verbindung testen aus.

Abfragen des Verbindungsservers

Führen Sie die folgende Abfrage aus:

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

Konfigurieren Sie den Verbindungsserver mithilfe der Microsoft Windows-Authentifizierung

Hinweis: Sie können einen Verbindungsserver nicht von RDS for SQL Server zu einer EC2-Instance oder zu einem lokalen SQL Server mit Windows-Authentifizierung konfigurieren.

Voraussetzungen

  • Sie müssen die Domain erstellt und mit dem AWS Managed Microsoft AD verknüpft haben.
  • Die EC2 SQL Server-Quellinstance und der Ziel-RDS-SQL-Server müssen über Konnektivität verfügen.

**Konfigurieren Sie den Verbindungsserver mithilfe der Windows-Authentifizierung von einem EC2- oder On-Premises-SQL-Server zu RDS for SQL Server **

  • Melden Sie sich mit Ihrem Domain-Login an und führen Sie dann die folgende Abfrage aus, um den Verbindungsserver zu erstellen.
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

Testen des Verbindungsservers

  1. Stellen Sie in Microsoft SQL Server Management Studio (SSMS) eine Verbindung zur RDS-Instance her.
  2. Wählen Sie im Menü Ansicht die Option Objekt-Explorer aus.
  3. Wählen Sie Serverobjekte, Verbindungsserver aus.
  4. Klicken Sie mit der rechten Maustaste auf Ihren Servernamen und wählen Sie Verbindung testen aus.

Abfragen des Verbindungsservers

Führen Sie die folgende Abfrage aus:

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

Problembehebung

Wenn Sie vom Client aus eine Verbindung herstellen, wird möglicherweise die folgende Fehlermeldung angezeigt:

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

Dieser Fehler tritt bei einem „Double-Hop“ auf. Ein Double-Hop tritt auf, wenn ein Computer eine Verbindung zu einem anderen Computer herstellt, um eine Verbindung zu einem dritten Computer herzustellen. Dieser Fehler kann in den folgenden Szenarien auftreten:

  • Es gibt keine SPN-Konfiguration (Service Principal Name) für AWS Managed AD, um die Authentifizierung zwischen dem Client und der EC2-Instance zu verarbeiten.
  • Der Verbindungsserver ist mit einem Endpunkt konfiguriert, der nicht zu Ihrer Domain gehört, z. B. dem RDS-Instance-Endpunkt. Die Authentifizierungsmethode für EC2 und RDS muss KERBEROS sein.

Gehen Sie wie folgt vor, um dieses Problem zu beheben:

Überprüfen der Authentifizierungsmethode, um zu bestätigen, dass KERBEROS ausgewählt wird, wenn Sie eine Verbindung zu RDS und EC2 herstellen

Führen Sie die folgende Abfrage mit dem Domain-Login vom Client aus:

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

Korrigieren Sie die SPNs für das SQL Server-Dienstkonto, das Teil Ihrer Domain ist

  1. Wählen Sie unter Active Directory Benutzer und Computer die Option example.com, Beispiel (Domänenname), Benutzer aus.
  2. Um die Eigenschaften anzuzeigen, klicken Sie mit der rechten Maustaste auf YourServiceAccount.
  3. Wählen Sie auf der Registerkarte Delegierung die Option Diesem Benutzer für die Delegierung an einen beliebigen Dienst vertrauen (nur Kerberos), und wählen Sie dann OK aus.
  4. Starten Sie den SQL-Serverdienst auf der EC2-Instance oder dem lokalen SQL-Server neu.
  5. Fügen Sie den SPN für das Dienstkonto hinzu, wie im folgenden Beispielbefehl gezeigt. Ersetzen Sie example durch Ihren Domainnamen. Ersetzen Sie ServiceAccountName und die Ec2name-Domain durch die richtigen Werte für Ihre Domain:
    setspn -A MSSQLSvc/Ec2name.domain.com example\ServiceAccountName
    setspn -A MSSQLSvc/Ec2name.domain.com:1433 example\ServiceAccountName

Führen Sie den folgenden Befehl aus, um die neu erstellten SPNs zu überprüfen:

setspn -l example\ServiceAccountName

Neuerstellen des Verbindungsservers mit dem RDS-Endpunkt example.com neu

  1. Führen Sie die folgende Abfrage in RDS for SQL Server aus, um den Servernamen abzurufen:

    select @@servername as ServerName, session_id,net_transport, auth_scheme from sys.dm_exec_connections where session_id= @@spid;
  2. Überprüfen Sie in der Ausgabe des vorherigen Befehls die Spalte mit dem Servernamen, um den SPN zu überprüfen:

    setspn -l YourServerName
  3. Die Ausgabe zeigt auch die registrierten ServicePrincipalNames für Ihre RDS-Instance, wie im folgenden Beispiel gezeigt:

    MSSQLSvc/ YourServerName.example.com:1433
  4. Führen Sie den folgenden Befehl aus, um den Verbindungsserver mit dem Domain-Login neu zu erstellen. Die Datenquelle ist dieselbe, die Sie in Schritt 2 aus der Befehlsausgabe abgerufen haben:

    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

Testen Sie die Konnektivität vom Client aus.

Für heterogene Verbindungsserver können Sie RDS Custom for SQL Server verwenden.

Weitere Informationen

Implementieren von Verbindungsservern mit Amazon RDS für Microsoft SQL Server