sp_addlinkedsrvlogin (Transact-SQL)

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

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname' 
     [ , [ @useself = ] 'TRUE' | 'FALSE' | NULL ] 
     [ , [ @locallogin = ] 'locallogin' ] 
     [ , [ @rmtuser = ] 'rmtuser' ] 
     [ , [ @rmtpassword = ] 'rmtpassword' ] 

Argumente

  • [ @rmtsrvname = ] 'rmtsrvname'
    Der Name eines Verbindungsservers, für den die Anmeldenamenzuordnung gilt. rmtsrvname ist vom Datentyp sysname und hat keinen Standardwert.

  • [ @useself = ] 'TRUE' | 'FALSE' | NULL
    Bestimmt, ob beim Herstellen der Verbindung mit rmtsrvname die Identität lokaler Anmeldenamen angenommen wird oder explizit Anmeldename und Kennwort übermittelt werden. Der Datentyp ist varchar(8), der Standardwert ist TRUE.

    Der Wert TRUE gibt an, dass Anmeldungen ihre eigenen Anmeldeinformationen für die Verbindung mit rmtsrvname verwenden, wobei die Argumente rmtuser und rmtpassword ignoriert werden. FALSE gibt an, dass die Argumente rmtuser und rmtpassword verwendet werden, um die Verbindung mit rmtsrvname für locallogin herzustellen. Wenn rmtuser und rmtpassword ebenfalls auf NULL festgelegt werden, wird kein Anmeldename oder Kennwort für den Zugriff auf den Verbindungsserver verwendet.

  • [ @locallogin = ] 'locallogin'
    Ein Anmeldename auf dem lokalen Server. locallogin ist vom Datentyp sysname, der Standardwert ist NULL. NULL gibt an, dass dieser Eintrag für alle lokalen Anmeldenamen gilt, die eine Verbindung mit rmtsrvname herstellen. Bei einem Wert ungleich NULL kann es sich bei locallogin um einen SQL Server-Anmeldenamen oder einen Windows-Anmeldenamen handeln. Dem Windows-Anmeldenamen muss das Recht zum Zugreifen auf SQL Server erteilt worden sein. Dies kann entweder direkt oder über die Mitgliedschaft in einer Windows-Gruppe erfolgen, der das Zugriffsrecht erteilt wurde.

  • [ @rmtuser = ] 'rmtuser'
    Der Remoteanmeldename, unter dem die Verbindung mit rmtsrvname hergestellt wird, wenn @useself den Wert FALSE hat. Ist der Remoteserver eine Instanz von SQL Server, in der nicht die Windows-Authentifizierung verwendet wird, stellt rmtuser einen SQL Server-Anmeldenamen dar. rmtuser ist vom Datentyp sysname, der Standardwert ist NULL.

  • [ @rmtpassword = ] 'rmtpassword'
    Das Kennwort, das rmtuser zugeordnet ist. rmtpassword ist vom Datentyp sysname, der Standardwert ist NULL.

Rückgabecodewerte

0 (Erfolg) 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 mithilfe von sp_addlinkedsrvlogin die Anmeldeinformationen an, die der lokale Server zum Anmelden beim Verbindungsserver verwendet.

HinweisHinweis

Um bei Verwendung einer Tabelle auf einem Verbindungsserver die besten Abfragepläne zu erstellen, muss der Abfrageprozessor Datenverteilungsstatistiken vom Verbindungsserver aufweisen. 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. Zum Anzeigen aller verfügbaren Statistiken muss der Benutzer Besitzer der Tabelle oder Mitglied der festen Serverrolle sysadmin, der festen Datenbankrolle db_owner oder der festen Datenbankrolle db_ddladmin auf dem Verbindungsserver sein, wenn der Verbindungsserver eine Instanz von SQL Server ist.

Eine Standardzuordnung zwischen allen Anmeldenamen auf dem lokalen Server und Remoteanmeldenamen auf dem Verbindungsserver wird durch Ausführen von sp_addlinkedserver automatisch erstellt. Die Standardzuordnung legt fest, dass SQL Server die Anmeldeinformationen der lokalen Anmeldung für den Zugriff auf den Verbindungsserver im Auftrag des Anmeldenamens verwendet. Dies ist gleichbedeutend mit dem Ausführen von sp_addlinkedsrvlogin mit auf true festgelegtem @useself für den Verbindungsserver, ohne dass ein lokaler Benutzername angegeben wird. Verwenden Sie sp_addlinkedsrvlogin nur, um die Standardzuordnung zu ändern oder um neue Zuordnungen für bestimmte lokale Anmeldenamen hinzuzufügen. Mithilfe von sp_droplinkedsrvlogin löschen Sie die Standardzuordnung oder eine beliebige andere Zuordnung.

Anstatt mit sp_addlinkedsrvlogin eine vordefinierte Anmeldenamenzuordnung erstellen zu müssen, kann SQL Server automatisch die Windows-Anmeldeinformationen für die Sicherheit (Windows-Anmeldename und -Kennwort) eines Benutzers verwenden, der die Abfrage für den Zugriff auf einen Verbindungsserver ausgibt. Dazu müssen die folgenden Bedingungen erfüllt sein:

  • Ein Benutzer ist mithilfe des 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 (z. B. SQL Server unter Windows).

HinweisHinweis

Die Delegierung muss für Szenarien mit einem einzigen Hop nicht aktiviert werden, bei mehreren Hops ist dies jedoch erforderlich.

Nachdem die Authentifizierung durch den Verbindungsserver mit den Zuordnungen erfolgt ist, die durch Ausführen von sp_addlinkedsrvlogin auf der lokalen Instanz von SQL Server definiert wurden, werden die Berechtigungen für die einzelnen Objekte in der Remotedatenbank nicht durch den lokalen Server, sondern durch den Verbindungsserver 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 Anmeldenamen mit dem Verbindungsserver mithilfe ihrer eigenen Anmeldeinformationen

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'
HinweisHinweis

Falls für einzelne Anmeldenamen explizite Zuordnungen erstellt werden, haben diese Vorrang vor globalen Zuordnungen, die für diesen Verbindungsserver vorhanden sind.

B. Verbinden eines bestimmten Anmeldenamens mit dem Verbindungsserver mithilfe anderer Anmeldeinformationen

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'
SicherheitshinweisSicherheitshinweis

Für dieses Beispiel wird nicht die Windows-Authentifizierung verwendet. Kennwörter werden unverschlüsselt übertragen. Kennwörter sind in Datenquellendefinitionen und Skripts, die auf Datenträgern gespeichert werden, in Sicherungen und in Protokolldateien sichtbar. 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.