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 = ] 'useself'
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 NULL
sind, 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 einem Standardwert von NULL
. NULL
Gibt an, dass dieser Eintrag für alle lokalen Anmeldungen gilt, die eine Verbindung mit @rmtsrvname herstellen. Andernfalls NULL
kann @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 einem Standardwert von 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.
Hinweise
Wenn sich ein Benutzer beim lokalen Server anmeldet und eine verteilte Abfrage ausführt, die auf eine Tabelle auf dem Verbindungsserver zugreift, muss sich der lokale Server beim Verbindungsserver im Auftrag des Benutzers anmelden, um auf diese Tabelle zugreifen zu können. 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 über eingeschränkte Berechtigungen für beliebige Tabellenspalten verfügen, haben möglicherweise nicht die erforderlichen Berechtigungen, um alle nützlichen Statistiken abzurufen. Der Abfrageplan kann daher weniger effizient und die Leistung beeinträchtigt sein. Wenn der verknüpfte Server eine Instanz von SQL Server ist, muss der Benutzer 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_addlinkedserver
wird 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 Sicherheitskontendelegierung ist auf dem Client und dem 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.
Berechtigungen
Erfordert die ALTER ANY LOGIN-Berechtigung auf dem Server.
Beispiele
A. Verbinden aller lokalen Anmeldungen mit dem verknüpften Server mithilfe ihrer eigenen Benutzeranmeldeinformationen
Das folgende Beispiel erstellt eine Zuordnung, um sicherzustellen, dass bei allen Anmeldungen vom lokalen Server auf den Verbindungsserver Accounts
die Anmeldeinformationen des jeweiligen Benutzers verwendet werden.
EXEC sp_addlinkedsrvlogin 'Accounts';
Oder
EXEC 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
Das folgende Beispiel erstellt eine Zuordnung, um sicherzustellen, dass die Windows-Benutzerin Domain\Mary
auf den Verbindungsserver Accounts
mit dem Anmeldenamen MaryP
und dem Kennwort d89q3w4u
zugreifen kann.
EXEC sp_addlinkedsrvlogin 'Accounts', 'false', 'Domain\Mary', 'MaryP', 'd89q3w4u';
Achtung
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 für diese Art von Verbindung auf keinen Fall ein Administratorkennwort. Wenden Sie sich wegen Sicherheitshinweisen speziell für Ihre Umgebung an Ihren Netzwerkadministrator.
C. Zuordnen bestimmter lokaler Anmeldung zu einer Remoteserveranmeldung
In einigen Fällen, z. B. mit Azure SQL verwaltete Instanz, 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 verwaltete Instanz 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 Azure SQL verwaltete 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_server
zuzuordnen:
EXEC 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-verwaltete Instanz 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 Azure SQL verwaltete 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_server
zuzuordnen:
EXEC 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;