Verknüpfte Server verwalten

Mit verknüpften Servern können Sie Daten lesen und Befehle in externen SQL Server-Datenbanken von Cloud SQL ausführen. Nachdem Sie Ihre Instanz registriert haben, können Sie verschlüsselte Verbindungen konfigurieren, Nutzeranmeldungen zuordnen und verteilte Abfragen oder Remote-Prozeduraufrufe (RPC) ausführen.

Instanz registrieren, um verknüpfte Server zuzulassen

Verwenden Sie den folgenden Befehl, um das Flag cloudsql enable linked servers zu Ihrer Instanz hinzuzufügen:

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

Ersetzen Sie INSTANCE_NAME durch den Namen der Instanz, die Sie zum Verknüpfen von Servern verwenden möchten.

Weitere Informationen finden Sie unter Datenbank-Flags konfigurieren.

Verknüpften Server hinzufügen

Führen Sie den Transact-SQL-Befehl sp_addlinkedserver aus, um einen verknüpften Server hinzuzufügen:

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

Dabei gilt:

  • LINKED_SERVER_NAME durch den Namen des zu erstellenden verknüpften Servers.
  • TARGET_SERVER_ID durch den Netzwerknamen, DNS-Namen oder die IP-Adresse des verknüpften Servers. Verwenden Sie für den Instanznamen das Format servername\instancename. Wenn Ihre Instanz einen nicht standardmäßigen Port verwendet, fügen Sie die Portnummer hinzu. Beispiel: servername\instancename, 8080

Führen Sie den folgenden Befehl aus, um eine Nutzerzuordnung für einen angemeldeten Nutzer hinzuzufügen:

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

Ersetzen Sie LINKED_SERVER_NAME durch den Namen des verknüpften Servers.

Führen Sie den folgenden Befehl aus, um den Standard-Remote-Anmeldenamen und das Standard-Remote-Passwort zu erstellen oder zu aktualisieren und auf alle lokalen Anmeldungen anzuwenden:

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

Dabei gilt:

  • LINKED_SERVER_NAME durch den Namen des verknüpften Servers.
  • LOGIN durch die Anmeldung für den lokalen Server. locallogin ist „sysname“ mit dem Standardwert NULL. NULL gibt an, dass dieser Eintrag für alle lokalen Anmeldungen gilt, die eine Verbindung zu rmtsrvname herstellen. Wenn nicht NULL, ist locallogin entweder eine SQL Server- oder eine Windows-Anmeldung. Wenn Sie einen Windows-Anmeldenamen verwenden, muss dieser entweder direkt oder über die Mitgliedschaft in einer Windows-Gruppe, die Zugriff hat, Zugriff auf den SQL Server haben.
  • USER_ID durch den Nutzer, der sich anmeldet.
  • PASSWORD durch das Nutzerpasswort.

Verknüpften Server mit einer verschlüsselten Verbindung hinzufügen

Führen Sie den Transact-SQL-Befehl sp_addlinkedserver aus, um einen verknüpften Server über eine verschlüsselte Verbindung hinzuzufügen:

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

Dabei gilt:

  • LINKED_SERVER_NAME durch den Namen des zu erstellenden verknüpften Servers.
  • TARGET_SERVER_ID durch den Namen des Zielservers oder die IP-Adresse und die Portnummer für den Zielserver.

Wenn sich der Name des Servers vom Namen im Zertifikat unterscheidet, müssen Sie angeben, dass der SQL Server dem Serverzertifikat vertrauen kann. Führen Sie den folgenden Befehl aus, um den Anbieterstring zu aktualisieren:

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

Dabei gilt:

  • LINKED_SERVER_NAME durch den Namen des zu erstellenden verknüpften Servers.
  • TARGET_SERVER_ID durch den Namen des Zielservers oder die IP-Adresse und die Portnummer für den Zielserver.

Verknüpfte Serverabfragen

Cloud SQL unterstützt die Verwendung von vierteiligen Namen zum Abfragen verknüpfter Server (Servername, Datenbankname, Schemaname und Objektname) sowie die folgenden Befehle:

  • OPENQUERY führt eine Abfrage auf einem angegebenen Server aus.
  • Mit EXECUTE können Sie dynamisches SQL für einen verknüpften Server ausführen.

Weitere Informationen finden Sie unter Optionen für die Remote-Ausführung von Abfragen vergleichen.

Remote-Prozeduraufrufe auf einem verknüpften Server aktivieren

Mit Remote-Prozeduraufrufen (RPC, Remote Procedure Calls) können Sie gespeicherte Prozeduren auf verknüpften Servern ausführen. Wenn Sie RPC hinzufügen möchten, führen Sie den Transact-SQL-Befehl sp_serveroption mit einem RPC-Argument aus. Es gibt zwei RPC-Argumente:

  • rpc aktiviert RPC vom angegebenen Server.
  • rpc out aktiviert RPC für den angegebenen Server.

Verwenden Sie den folgenden sp_serveroption-Befehl mit dem Argument rpc, um RPC von LINKED_SERVER_NAME zu aktivieren:

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

Ersetzen Sie LINKED_SERVER_NAME durch den Namen des verknüpften Servers.

Verwenden Sie den folgenden sp_serveroption-Befehl mit dem Argument rpc out, um RPC zu aktivieren:

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

Ersetzen Sie LINKED_SERVER_NAME durch den Namen des verknüpften Servers.

Nutzerzuordnung für einen verknüpften Server entfernen

Führen Sie den folgenden Befehl aus, um eine zuvor hinzugefügte Nutzerzuordnung zu entfernen:

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

Dabei gilt:

  • LINKED_SERVER_NAME durch den Namen des zu löschenden verknüpften Servers.
  • LOGIN durch die Anmeldung für den lokalen Server. locallogin ist „sysname“ mit dem Standardwert NULL. NULL gibt an, dass dieser Eintrag für alle lokalen Anmeldungen gilt, die eine Verbindung zu rmtsrvname herstellen. Wenn nicht NULL, ist locallogin entweder eine SQL Server- oder eine Windows-Anmeldung. Wenn Sie einen Windows-Anmeldenamen verwenden, muss dieser entweder direkt oder über die Mitgliedschaft in einer Windows-Gruppe, die Zugriff hat, Zugriff auf den SQL Server haben.

Registrierte Instanz aus der Liste der zulässigen verknüpften Server entfernen

So entfernen Sie verknüpfte Server:

  • Löschen Sie vorhandene verknüpfte Server mit der gespeicherten Transact-SQL-Prozedur sp_dropserver.
  • Entfernen Sie das Flag cloudsql enable linked servers, um eine registrierte Instanz zu entfernen.

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

    Ersetzen Sie INSTANCE_NAME durch den Namen der Instanz, aus der Sie verknüpfte Server entfernen möchten.

    Alternativ können Sie den folgenden Befehl ausführen, um alle Datenbank-Flags zu löschen:

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

    Ersetzen Sie INSTANCE_NAME durch den Namen der Instanz, aus der Sie verknüpfte Server entfernen möchten.

Fehlerbehebung

Problem Fehlerbehebung
Msg 7411, Level 16, State 1, Line 25

Server 'LINKED_SERVER_NAME' is not configured for DATA ACCESS.
Die Option DataAccess ist deaktiviert. Führen Sie den folgenden Befehl aus, um den Datenzugriff zu aktivieren:
EXEC sp_serveroption
    @server='LINKED_SERVER_NAME',
    @optname='data access',
    @optvalue='TRUE'

Ersetzen Sie LINKED_SERVER_NAME durch den Namen des verknüpften Servers.

Access to the remote server is denied because no login-mapping exists. (Microsoft SQL Server, Error: 7416) Wenn dieses Problem bei der Herstellung einer verschlüsselten Verbindung auftritt, müssen Sie eine andere Methode angeben, um die Nutzer-ID beim Zugriff auf den verknüpften Server anzugeben. Führen Sie hierzu den folgenden Befehl aus:
EXEC master.dbo.sp_addlinkedserver
   @server = N'LINKED_SERVER_NAME',
   @srvproduct= N'',
   @provider= N'MSOLEDBSQL',
   @datasrc= N'TARGET_SERVER_ID',
   @provstr= N'Encrypt=yes;TrustServerCertificate=yes;User ID=USER_ID'

Ersetzen Sie Folgendes:

  • LINKED_SERVER_NAME durch den Namen des verknüpften Servers.
  • TARGET_SERVER_ID durch den Namen des Zielservers oder die IP-Adresse und die Portnummer für den Zielserver.
  • USER_ID durch den Nutzer, der sich anmeldet.
Unerwartetes Verhalten Wenn du unerwartetes Verhalten feststellst, achte darauf, dass du einen unterstützten Anbieter verwendest. Weitere Informationen finden Sie in der Microsoft-Dokumentation.

Nächste Schritte