Der lokale Anmeldevorgang funktioniert nicht mit einem Verbindungsserver

7

Ich habe auf meinem Server einen Verbindungsserver mit den folgenden Methoden erstellt:

exec sp_addlinkedserver
    @server=N'MyOldDB',
    @srvproduct=N'',
    @provider = N'SQLNCLI',
    @datasrc=N'MYSERVER',
    @catalog=N'TheDefaultDatabase';

Nun, trotz der folgenden Beschreibung, wie Anmeldeinformationen ermittelt werden (aus MSDN):

Eine Standardzuordnung zwischen allen Anmeldungen auf dem lokalen Server und Remote-Anmeldungen auf dem Verbindungsserver wird automatisch durch Ausführen von sp_addlinkedserver erstellt. Die Standardzuordnung besagt, dass SQL Server die Benutzeranmeldeinformationen der lokalen Anmeldung verwendet, wenn im Namen der Anmeldung eine Verbindung zum Verbindungsserver hergestellt wird. Dies entspricht der Ausführung von sp_addlinkedsrvlogin, wobei @useself für den Verbindungsserver auf true gesetzt ist, ohne einen lokalen Benutzernamen anzugeben.

Ich erhalte die folgende Fehlermeldung:

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

Wenn ich das versuche:

select top 10 * from MyOldDB.TheDefaultDatabase.dbo.Batches

Kann mich hier jemand in die richtige Richtung weisen?

Eric Smith
quelle

Antworten:

6

Der Fehler, den Sie haben, hat nichts mit Anmeldungen als solchen zu tun.

Dies wird verursacht, wenn SQL Server versucht, das NT-Anmeldetoken an den Remote-Server weiterzuleiten. Es ist nicht berechtigt, das Token weiterzuleiten. Der Remote-Server sucht danach, da die lokalen Server eine Verbindung mit Integrated Security herstellen.

Sie müssen "Security Account Delegation" für den lokalen Server konfigurieren.

Wie für die Standardzuordnung ...

Was MSDN sagt, ist, dass wenn Sie "MyDomain \ bob" lokal haben, Sie einen "virtuellen" Eintrag "lokal gespeichert" haben, der "MyDomain \ bob" heißt. Es findet keine Abstimmung der beiden Server zwischen den beiden Servern statt. Dies ist dasselbe wie das Ausführen von:

EXEC sp_addlinkedsrvlogin 'MyLinkedServer', @useself = 'TRUE';

Beachten Sie, dass "MyDomain \ MyGroup" nicht zugeordnet ist: nur diskrete NT-Benutzer und SQL-Anmeldungen. Keine NT-Gruppen.

Dies alles wird unter "Sicherheit für Verbindungsserver" beschrieben.

Die Standardzuordnung für eine Verbindungsserverkonfiguration besteht darin, die aktuellen Sicherheitsanmeldeinformationen der Anmeldung zu emulieren. Diese Art der Zuordnung wird als Selbstzuordnung bezeichnet. Wenn ein Verbindungsserver mithilfe von sp_addlinkedserver hinzugefügt wird, wird für alle lokalen Anmeldungen eine Standard-Selbstzuordnung hinzugefügt. Wenn die Delegierung von Sicherheitskonten verfügbar ist und der Verbindungsserver die Windows-Authentifizierung unterstützt, wird die Selbstzuordnung für die Windows-authentifizierten Anmeldungen unterstützt.

...

Wenn die Delegierung des Sicherheitskontos auf dem Client oder dem sendenden Server nicht verfügbar ist oder der Verbindungsserver / -anbieter den Windows-Authentifizierungsmodus nicht erkennt, funktioniert die Selbstzuordnung für Anmeldungen, die die Windows-Authentifizierung verwenden, nicht.

gbn
quelle