Freigeben über


sp_addlinkedsrvlogin (Transact-SQL)

Gilt für:SQL Server

Erstellt oder aktualisiert eine Zuordnung zwischen einer Anmeldung in der lokalen Instanz von SQL Server und einem Sicherheitskonto auf einem Remoteserver.

Transact-SQL-Syntaxkonventionen

Syntax

sp_addlinkedsrvlogin
    [ @rmtsrvname = ] N'rmtsrvname'
    [ , [ @useself = ] 'useself' ]
    [ , [ @locallogin = ] N'locallogin' ]
    [ , [ @rmtuser = ] N'rmtuser' ]
    [ , [ @rmtpassword = ] N'rmtpassword' ]
[ ; ]

Argumente

[ @rmtsrvname = ] N'rmtsrvname'

Der Name eines verknüpften Servers, auf den die Anmeldezuordnung angewendet wird. @rmtsrvname ist "sysname" ohne Standard.

[ @useself = ] 'benutzen'

Bestimmt, ob eine Verbindung mit rmtsrvname hergestellt werden soll, indem lokale Anmeldungen angenommen oder explizit eine Anmeldung und ein Kennwort übermittelt werden. @useself ist varchar(8) mit einem Standardwert von true.

  • Ein Wert von true specifies that logins use their own credentials to connect to @rmtsrvname, with the @rmtuser and @rmtpassword arguments being ignored.
  • false Gibt an, dass die Argumente @rmtuser und @rmtpassword verwendet werden, um eine Verbindung mit @rmtsrvname für die angegebene @locallogin herzustellen.

Wenn @rmtuser und @rmtpassword festgelegt NULLsind, wird keine Anmeldung oder kein Kennwort verwendet, um eine Verbindung mit dem verknüpften Server herzustellen.

[ @locallogin = ] N'locallogin'

Eine Anmeldung auf dem lokalen Server. @locallogin ist "sysname" mit der Standardeinstellung " NULL. NULL Gibt an, dass dieser Eintrag für alle lokalen Anmeldungen gilt, die eine Verbindung mit @rmtsrvname herstellen. Andernfalls NULLkann @locallogin eine SQL Server-Anmeldung oder ein Windows-Konto sein. Das Windows-Konto muss direkt oder über die Mitgliedschaft in einer Windows-Gruppe Zugriff auf SQL Server haben.

[ @rmtuser = ] N'rmtuser'

Die Remoteanmeldung, die zum Herstellen einer Verbindung mit @rmtsrvname verwendet wird, wenn @useself dies der Zeitpunkt ist false. @rmtuser ist "sysname" mit der Standardeinstellung " NULL. Wenn der Remoteserver eine Instanz von SQL Server ist, die keine Windows-Authentifizierung verwendet, ist @rmtuser eine SQL Server-Anmeldung.

[ @rmtpassword = ] N'rmtpassword'

Das Kennwort, das @rmtuser zugeordnet ist. @rmtpassword ist "sysname" mit der Standardeinstellung " NULL.

Rückgabecodewerte

0 (erfolgreich) oder 1 Fehler.

Bemerkungen

Wenn sich ein Benutzer beim lokalen Server anmeldet und eine verteilte Abfrage ausführt, die auf eine Tabelle auf dem verknüpften Server zugreift, muss sich der lokale Server im Namen des Benutzers beim verknüpften Server anmelden, um auf diese Tabelle zuzugreifen. Geben Sie sp_addlinkedsrvlogin die Anmeldeinformationen an, die der lokale Server zum Anmelden beim verknüpften Server verwendet.

Hinweis

Um die besten Abfragepläne zu erstellen, wenn Sie eine Tabelle auf einem verknüpften Server verwenden, muss der Abfrageprozessor Über Datenverteilungsstatistiken vom verknüpften Server verfügen. Benutzer, die eingeschränkte Berechtigungen für spalten der Tabelle besitzen, verfügen möglicherweise nicht über ausreichende Berechtigungen, um alle nützlichen Statistiken zu erhalten, und erhalten möglicherweise einen weniger effizienten Abfrageplan und eine schlechte Leistung. Wenn der verknüpfte Server eine Instanz von SQL Server ist, muss der Benutzer, um alle verfügbaren Statistiken abzurufen, die Tabelle besitzen oder Mitglied der festen Serverrolle "sysadmin ", der db_owner festen Datenbankrolle oder der db_ddladmin festen Datenbankrolle auf dem verknüpften Server sein. SQL Server 2012 SP1 (11.0.3x) ändert die Berechtigungseinschränkungen für das Abrufen von Statistiken und ermöglicht Es Benutzern mit SELECT-Berechtigung, auf Statistiken zuzugreifen, die über DBCC-SHOW_STATISTICS verfügbar sind. Weitere Informationen finden Sie im Abschnitt "Berechtigungen" von DBCC SHOW_STATISTICS.

Durch ausführen sp_addlinkedserverwird automatisch eine Standardzuordnung zwischen allen Anmeldungen auf dem lokalen Server und Remoteanmeldungen auf dem verknüpften Server erstellt. Die Standardzuordnung gibt an, dass SQL Server die Benutzeranmeldeinformationen der lokalen Anmeldung verwendet, wenn eine Verbindung mit dem verknüpften Server im Auftrag der Anmeldung hergestellt wird. Dies entspricht der Ausführung sp_addlinkedsrvlogin mit @useself festgelegtem true Wert für den verknüpften Server, ohne einen lokalen Benutzernamen anzugeben. Verwenden Sie diese Einstellung sp_addlinkedsrvlogin nur, um die Standardzuordnung zu ändern oder neue Zuordnungen für bestimmte lokale Anmeldungen hinzuzufügen. Um die Standardzuordnung oder eine andere Zuordnung zu löschen, verwenden Sie sp_droplinkedsrvlogin.

sp_addlinkedsrvlogin Anstatt eine vordefinierte Anmeldezuordnung zu erstellen, kann SQL Server automatisch die Windows-Sicherheitsanmeldeinformationen (Windows-Anmeldename und -kennwort) eines Benutzers verwenden, der die Abfrage ausgibt, um eine Verbindung mit einem verknüpften Server herzustellen, wenn alle folgenden Bedingungen vorhanden sind:

  • Ein Benutzer ist über den Windows-Authentifizierungsmodus mit SQL Server verbunden.

  • Die Sicherheitskontodelegierung ist auf dem Client und sendenden Server verfügbar.

  • Der Anbieter unterstützt den Windows-Authentifizierungsmodus; Beispiel: SQL Server, der unter Windows ausgeführt wird.

Hinweis

Die Delegierung muss für Szenarien mit nur einem Hop nicht aktiviert werden, ist aber für Szenarien mit mehreren Hops erforderlich.

Nachdem die Authentifizierung vom verknüpften Server mithilfe der Zuordnungen ausgeführt wurde, die durch Ausführen sp_addlinkedsrvlogin der lokalen Instanz von SQL Server definiert werden, werden die Berechtigungen für einzelne Objekte in der Remotedatenbank vom verknüpften Server und nicht vom lokalen Server bestimmt.

sp_addlinkedsrvlogin kann nicht innerhalb einer benutzerdefinierten Transaktion ausgeführt werden.

Erlaubnisse

Erfordert ALTER ANY LOGIN-Berechtigung auf dem Server.

Beispiele

Ein. Verbinden aller lokalen Anmeldungen mit dem verknüpften Server mithilfe ihrer eigenen Benutzeranmeldeinformationen

Im folgenden Beispiel wird eine Zuordnung erstellt, um sicherzustellen, dass alle Anmeldungen am lokalen Server mithilfe ihrer eigenen Benutzeranmeldeinformationen mit dem verknüpften Server Accounts verbunden sind.

EXECUTE sp_addlinkedsrvlogin 'Accounts';

Oder

EXECUTE sp_addlinkedsrvlogin 'Accounts', 'true';

Hinweis

Wenn für einzelne Anmeldungen explizite Zuordnungen erstellt werden, haben sie Vorrang vor allen globalen Zuordnungen, die für diesen verknüpften Server möglicherweise vorhanden sind.

B. Verbinden einer bestimmten Anmeldung mit dem verknüpften Server mithilfe unterschiedlicher Benutzeranmeldeinformationen

Im folgenden Beispiel wird eine Zuordnung erstellt, um sicherzustellen, dass der Windows-Benutzer Domain\Mary mithilfe der Anmeldung Accountseine Verbindung mit dem verknüpften Server MaryP herstellt. Ersetzen Sie <password> es durch ein sicheres Kennwort.

EXECUTE sp_addlinkedsrvlogin 'Accounts', 'false', 'Domain\Mary', 'MaryP', '<password>';

Vorsicht

In diesem Beispiel wird die Windows-Authentifizierung nicht verwendet. Kennwörter werden unverschlüsselt übertragen. Kennwörter sind möglicherweise in Datenquellendefinitionen und Skripts sichtbar, die auf dem Datenträger, in Sicherungen und in Protokolldateien gespeichert werden. Verwenden Sie niemals ein Administratorkennwort in dieser Art von Verbindung. Wenden Sie sich an Ihren Netzwerkadministrator, um sicherheitsspezifische Anleitungen für Ihre Umgebung zu erhalten.

C. Zuordnen bestimmter lokaler Anmeldung zu einer Remoteserveranmeldung

In einigen Fällen, z. B. bei azure SQL Managed Instance, um einen SQL-Agent-Auftrag auszuführen, der eine Transact-SQL-Abfrage (T-SQL) auf einem Remoteserver über einen verknüpften Server ausführt, müssen Sie eine Zuordnung zwischen einer Anmeldung auf dem lokalen Server zu einer Anmeldung auf dem Remoteserver erstellen, die über die Berechtigung zum Ausführen der T-SQL-Abfrage verfügt. Wenn der SQL-Agent-Auftrag eine Verbindung mit dem Remoteserver über den verknüpften Server herstellt, führt er die T-SQL-Abfrage im Kontext der Remoteanmeldung aus, die über die erforderlichen Berechtigungen zum Ausführen der T-SQL-Abfrage verfügen muss.

Wenn Sie Anmeldeinformationen für einen SQL-Agent-Auftrag in azure SQL Managed Instance zuordnen, muss die lokale Anmeldung, die Sie der Remoteanmeldung zuordnen, der Besitzer des SQL-Agent-Auftrags sein, es sei denn, der SQL-Agent-Auftrag ist sysadmin, in diesem Fall sollten Sie alle lokalen Anmeldungen zuordnen. Weitere Informationen erfahren Sie, wie Sie SQL-Agent-Aufträge mit verwalteter Azure SQL-Instanz überprüfen.

Führen Sie den folgenden Beispielbefehl auf dem lokalen Server aus, um die lokale Anmeldung local_login_name beim Herstellen einer login_name Verbindung mit dem verknüpften Server remote_serverzuzuordnen:

EXECUTE master.dbo.sp_addlinkedsrvlogin
    @rmtsrvname = N'<remote_server>',
    @useself = N'False',
    @locallogin = N'<local_login_name>',
    @rmtuser = N'<login_name>',
    @rmtpassword = '<login_password>';

D. Zuordnen aller lokalen Anmeldungen zu einer Remoteserveranmeldung

Durch Festlegen locallogin auf NULL, können Sie alle lokalen Anmeldungen einer Anmeldung auf dem Remoteserver zuordnen.

Die Zuordnung aller lokalen Anmeldungen zu einer Remoteserveranmeldung ist erforderlich, wenn ein SQL Managed Instance SQL-Agent-Auftrag ausgeführt wird, der vom Sysadmin gehört, der einen Remoteserver über einen verknüpften Server abfragt. Weitere Informationen erfahren Sie, wie Sie SQL-Agent-Aufträge mit verwalteter Azure SQL-Instanz überprüfen. Wenn der SQL-Agent-Auftrag eine Verbindung mit dem Remoteserver über den verknüpften Server herstellt, führt er die T-SQL-Abfrage im Kontext der Remoteanmeldung aus, die über die erforderlichen Berechtigungen zum Ausführen der T-SQL-Abfrage verfügen muss.

Führen Sie den folgenden Beispielbefehl auf dem lokalen Server aus, um alle lokalen Anmeldungen beim Herstellen einer login_name Verbindung mit dem verknüpften Server remote_serverzuzuordnen:

EXECUTE master.dbo.sp_addlinkedsrvlogin
    @rmtsrvname = N'<remote_server>',
    @useself = N'False',
    @locallogin = NULL,
    @rmtuser = N'<login_name>',
    @rmtpassword = '<login_password>';

E. Überprüfen verknüpfter Anmeldungen

Das folgende Beispiel zeigt alle Anmeldeinformationen, die für einen verknüpften Server zugeordnet wurden:

SELECT s.name AS server_name, ll.remote_name, sp.name AS principal_name
FROM sys.servers s
INNER JOIN sys.linked_logins ll
    ON s.server_id = ll.server_id
INNER JOIN sys server_principals sp
    ON ll.local_principal_id = sp.principal_id
WHERE s.is_linked = 1;