Der SQL-Agentauftrag, der eine verteilte Abfrage ausführt, schlägt möglicherweise mit 65535-, 782-oder 7437-Fehlermeldungen fehl

Gilt für: SQL Server 2019SQL Server 2017 on WindowsSQL Server 2016

Problembeschreibung


Ein SQL-Agentauftrag, der eine verteilte Abfrage (Verbindungsserver) ausführt, schlägt möglicherweise mit einer der folgenden Fehlermeldungen fehl, wenn der Besitzer des Auftrags kein Mitglied der sysadmin -Serverrolle ist:
OLE DB-Anbieter "<Anbietername>" für den Verbindungsserver "<LinkedServer Name>" zurückgegebene Nachricht "Anmeldetimeout abgelaufen". OLE DB-Anbieter "<Anbietername>" für den Verbindungsserver "" <LinkedServer-Name> "zurückgegebene Nachricht" beim Herstellen einer Verbindung mit dem Server ist ein Fehler aufgetreten. Dieser Fehler kann beim Herstellen einer Verbindung mit SQL Server 2005 durch die Tatsache verursacht werden, dass unter den Standardeinstellungen SQL Server keine Remoteverbindungen zulässt. " Msg 65535, Ebene 16, Status 1, Zeile 0SQL-Netzwerkschnittstellen: Fehler beim Ermitteln der Server/Instanz, die [xFFFFFFFF] angegeben ist.
Oder
Msg 782, Ebene 16, Status 1, 0SSL-Anbieter: im SicherheitspaketOLE DB-Anbieter "<Anbietername>" für den Verbindungsserver "<LinkedServer Name>" hat die Meldung "der Client konnte keine Verbindung herstellen" zurückgegeben.
In der SQL Server 2008-Umgebung können die Fehlermeldungen beispielsweise wie folgt aussehen:
OLE DB-Anbieter "sqlncli" für den Verbindungsserver "<LinkedServer Name>" zurückgegebene Nachricht "Anmeldetimeout abgelaufen". OLE DB-Anbieter "sqlncli" für den Verbindungsserver "" <LinkedServer-Name> "zurückgegebene Nachricht" beim Herstellen einer Verbindung mit dem Server ist ein Fehler aufgetreten. Dieser Fehler kann beim Herstellen einer Verbindung mit SQL Server 2005 durch die Tatsache verursacht werden, dass unter den Standardeinstellungen SQL Server keine Remoteverbindungen zulässt. " Msg 65535, Ebene 16, Status 1, Zeile 0SQL-Netzwerkschnittstellen: Fehler beim Ermitteln der Server/Instanz, die [xFFFFFFFF] angegeben ist. 
Oder
Msg 782, Ebene 16, Status 1, 0SSL-Anbieter: im SicherheitspaketOLE DB-Anbieter "SQLNCLI10" für den Verbindungsserver "<LinkedServer Name>" wurde die Meldung "der Client konnte keine Verbindung herstellen" verfügbar.
Oder
Msg 7437, Ebene 16, Status 1, Zeile 3Linked Server können nicht unter Identitätswechsel ohne Zuordnung für die imitierte Anmeldung verwendet werden.
Bei Verwendung von OPENQUERY oder beim Ausführen einer verteilten Abfrage mithilfe von Identitätswechsel über die T-SQL-Anweisung EXECUTE AS Login wird möglicherweise auch das gleiche Verhalten angezeigt.

Ursache


Der Transact-SQL-Auftragsschritt wird als Besitzer des Auftragsschritts ausgeführt, wenn der Besitzer des Auftragsschritts kein Mitglied der festen Serverrolle sysadmin ist. Der SQL-Agent verwendet "EXECUTE AS Login", um den Auftragsschritt unter dem Kontext des Besitzers des Auftragsschritts auszuführen. Sie können die EXECUTE AS-Anweisung nicht über Servergrenzen hinweg verwenden. Es handelt sich hierbei um ein beabsichtigtes Verhalten. Weitere Informationen finden Sie in den folgenden Themen in der SQL Server-Online Dokumentation:Hinweis: die gleiche Ursache gilt für das Szenario, in dem Sie den Ausführungskontext einer verteilten Abfrage in Management Studio mithilfe der EXECUTE AS -Anweisung manuell ändern möchten.

Problemumgehung


Wichtig: Wenn Sie die folgende Problemumgehung verwenden, müssen Sie eine explizite Anmeldung des lokalen Servers für Remoteserver-Anmelde Zuordnungen mithilfe der Seite Sicherheit unter Eigenschaften des verknüpften Serverobjekts definieren. Da die Remotebenutzer Spalte eine SQL Server-Authentifizierungs Anmeldung auf dem Remoteserver sein muss, sollte der Authentifizierungsmodus des Remoteservers entweder bereits auf gemischter Modus festgesetzt oder in den gemischten Modus geändert werden, bevor die unten beschriebene Problemumgehung verwendet wird. Wenn ein T-SQL-Auftragsschritt einem Benutzer gehört, der nicht Bestandteil der sysadmin -Serverrolle ist und der Schritt eine verteilte Abfrage enthält, führen Sie die folgenden Schritte aus, um sicherzustellen, dass die Aufträge oder Abfragen nicht fehlerhaft sind:
  1. Erstellen Sie eine Zuordnung für jeden Auftragsschritt Besitzer auf dem lokalen Server zu einer vorhandenen oder neuen Anmeldung auf dem Remoteserver.
  2. Stellen Sie sicher, dass die Anmeldung über ausreichende Berechtigungen zum Ausführen verschiedener Module auf dem Remoteserver verfügt, auf die in der verteilten Abfrage zugegriffen wird.
Weitere Informationen finden Sie unter dem folgenden Thema in der SQL Server-Online Dokumentation:

Weitere Informationen


Manchmal können Sie feststellen, dass Abfragen, die in einem der Szenarien im Abschnitt Symptoms besprochen wurden, möglicherweise erfolgreich ausgeführt werden. Dies tritt normalerweise auf, wenn der Benutzer mit Identitäten zuvor beim Remote System angemeldet war und das System weiterhin eine Verbindung geöffnet hat, die von der Remoteverwendung hergestellt wurde. Sie sollten nicht davon ausgehen, dass die Abfrage immer funktioniert.Schritte zum Reproduzieren des Verhaltens
  1. Erstellen Sie auf der SQL-Instanz einen Verbindungsserver zu einer anderen SQL-Instanz, indem Sie entweder SQL Server Management Studio (SSMS) oder das folgende Skript verwenden.
    EXEC master.dbo.sp_addlinkedserver @server = <server name>, @srvproduct=N'SQL Server'/* For security reasons the linked server remote logins password is changed with ######## */EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=<servername> ,@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
  2. Führen Sie die folgende Abfrage in SSMS mithilfe einer Anmeldung aus, die ein Mitglied der sysadmin-Serverrolle ist, und stellen Sie sicher, dass Sie ordnungsgemäß funktioniert.
    select * from <servername>.master.sys.sysobjects
  3. Ändern Sie jetzt den Kontext der Abfrage in ein nicht-sysadmin-Konto, und führen Sie dieselbe Abfrage aus.
    execute as login=’Domain\Login1’goselect suser_sname()goselect * from <servername>.master.sys.sysobjectsgo
    Dieser Schritt schlägt mit dem im Abschnitt Symptom des Artikels genannten Fehler fehl.