provider: TCP Provider, error: 0 – The specified network name is no longer available.

System.Data.SqlClient.SqlException: A connection was successfully established with the server, but then an error occurred during the login process. (provider: TCP Provider, error: 0 – The specified network name is no longer available.)

In diesem Artikel beschreibe ich eine mögliche Lösung der Fehlermeldung

System.Data.SqlClient.SqlException: A connection was successfully established with the server, but then an error occurred during the login process. (provider: TCP Provider, error: 0 – The specified network name is no longer available.)

und

Es kann keine Verbindung mit dem „LobSystem“ (externes System) hergestellt werden. Ursache: „Es konnte eine Verbindung mit dem Server hergestellt werden, doch während des Anmeldevorgangs trat ein Fehler auf. (provider: TCP Provider, error: 0 – Der angegebene Netzwerkname ist nicht mehr verfügbar.)“

und Ähnlichen.

Fehlermeldungen

Folgende und Ähnliche Fehlermeldungen können in verschiedenen Logs auftauchen.

System.Data.SqlClient.SqlException: A connection was successfully established with the server, but then an error occurred during the login process. (provider: TCP Provider, error: 0 – The specified network name is no longer available.)

A connection was successfully established with the server, but then an error occurred during the login process ( provider: TCP provider, error:0 – the specified network name is no longer available) Microsoft Sql server, Error: 64)

DB connection creation failed. Exception message is : Es konnte eine Verbindung mit dem Server hergestellt werden, doch während des Anmeldevorgangs trat ein Fehler auf. (provider: TCP Provider, error: 0 – Der angegebene Netzwerkname ist nicht mehr verfügbar.)

Im SharePoint ULS-Log wird folgender Fehler generiert.

DB connection creation failed. Exception message is : Es konnte eine Verbindung mit dem Server hergestellt werden, doch während des Anmeldevorgangs trat ein Fehler auf. (provider: TCP Provider, error: 0 – Der angegebene Netzwerkname ist nicht mehr verfügbar.)

Possibly the host name ‚my-sql-server.domain.com,1234‘ is invalid and it’s could not be found. The exception is System.Net.Sockets.SocketException (0x80004005): Der angegebene Host ist unbekannt bei System.

Im SharePoint ULS-Log wird folgender Fehler generiert.

Possibly the host name ‚my-sql-server.domain.com,1234‘ is invalid and it’s could not be found. The exception is System.Net.Sockets.SocketException (0x80004005): Der angegebene Host ist unbekannt bei System.Net.Dns.GetAddrInfo(String name) bei System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6) bei System.Net.Dns.GetHostAddresses(String hostNameOrAddress) bei Microsoft.SharePoint.Utilities.CommonUtility.IsIntranetAddress(String hostName)

Es kann keine Verbindung mit dem „LobSystem“ (externes System) hergestellt werden. Ursache: „Es konnte eine Verbindung mit dem Server hergestellt werden, doch während des Anmeldevorgangs trat ein Fehler auf. (provider: TCP Provider, error: 0 – Der angegebene Netzwerkname ist nicht mehr verfügbar.)“

Im SharePoint ULS-Log wird folgender Fehler generiert.

InnerException 1: Es kann keine Verbindung mit dem „LobSystem“ (externes System) hergestellt werden. Ursache: „Es konnte eine Verbindung mit dem Server hergestellt werden, doch während des Anmeldevorgangs trat ein Fehler auf. (provider: TCP Provider, error: 0 – Der angegebene Netzwerkname ist nicht mehr verfügbar.)“ (Es konnte eine Verbindung mit dem Server hergestellt werden, doch während des Anmeldevorgangs trat ein Fehler auf. (provider: TCP Provider, error: 0 – Der angegebene Netzwerkname ist nicht mehr verfügbar.)) Stack Trace: bei Microsoft.SharePoint.BusinessData.SystemSpecific.Db.DbConnectionManager.Execute(Object[] args) bei Microsoft.SharePoint.BusinessData.Infrastructure.WindowsAuthenticator.ExecuteAfterLogonUser(Object[] args, ISecureStoreProvider ssoProvider, String ss…

System.Data.SqlClient.SqlException (0x80131904): Es konnte eine Verbindung mit dem Server hergestellt werden, doch während des Anmeldevorgangs trat ein Fehler auf. (provider: TCP Provider, error: 0 – Der angegebene Netzwerkname ist nicht mehr verfügbar.) —> System.ComponentModel.Win32Exception (0x80004005)

Im SharePoint ULS-Log wird folgender Fehler generiert.

InnerException 2: System.Data.SqlClient.SqlException (0x80131904): Es konnte eine Verbindung mit dem Server hergestellt werden, doch während des Anmeldevorgangs trat ein Fehler auf. (provider: TCP Provider, error: 0 – Der angegebene Netzwerkname ist nicht mehr verfügbar.) —> System.ComponentModel.Win32Exception (0x80004005): Der angegebene Netzwerkname ist nicht mehr verfügbar bei System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) bei System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnect…

System.ComponentModel.Win32Exception (0x80004005): Der angegebene Netzwerkname ist nicht mehr verfügbar

Im SharePoint ULS-Log wird folgender Fehler generiert.

InnerException 3: System.ComponentModel.Win32Exception (0x80004005): Der angegebene Netzwerkname ist nicht mehr verfügbar

Fehler: 17832, Schweregrad: 20, Status: 8.
The login packet used to open the connection is structurally invalid; the connection has been closed. Please contact the vendor of the client library. [CLIENT: <Computer IP>]

In den SQL-Server-Logs finden man diese oder ähnliche Einträge.

Fehler: 17832, Schweregrad: 20, Status: 8.
The login packet used to open the connection is structurally invalid; the connection has been closed. Please contact the vendor of the client library. [CLIENT: <Computer IP>]

Error: 17832, Severity: 20, State: 8 – The login packet used to open the connection is structurally invalid

In den SQL-Server-Logs finden man diese oder ähnliche Einträge.

Error: 17832, Severity: 20, State: 8 – The login packet used to open the connection is structurally invalid

Das zum Öffnen der Verbindung verwendete Anmeldungspaket weist eine ungültige Struktur auf. Die Verbindung wurde geschlossen. Wenden Sie sich an den Hersteller der Clientbibliothek. [CLIENT: <Computer IP>]

In der Ereignisanzeige wird folgender Eintrag generiert.

Protokollname: Application

Quelle: MSSQL$<SQL-Instanz-Name>

Aufgabenkategorie:Anmeldung

Ebene: Fehler

Computer: <SQL-Server bzw. Failover-Cluster-Knoten>

Beschreibung: Das zum Öffnen der Verbindung verwendete Anmeldungspaket weist eine ungültige Struktur auf. Die Verbindung wurde geschlossen. Wenden Sie sich an den Hersteller der Clientbibliothek. [CLIENT: <Computer IP>]

Beschreibung

Allgemein

Plötzlich können sich bestimmte AD-Benutzer nicht mehr anmelden. Das Problem ist nur auf einige Benutzer und nur auf einige Systeme beschränkt.

Das Problem könnte mit den alten SQL-Server-Systemen bzw. älteren Betriebssystemen zusammenhängen.

Es könnte sein, dass im SharePoint Daten aus externen Datenbanken (z.B. per BDC/BCS) nicht mehr abgerufen werden können.

Auf den SharePoint-Servern und Datenbankservern werden die oben genannten Log-Einträge generiert.

Kerberos

Wird mittels Kerberos-Authentifizierung gearbeitet, so muss maximale Kerberos-Tiket-Größe – MaxTokenSize –  beachtet werden. Die Ticketgröße setzt sich unter anderem aus Gruppenmitgliedschaften, SID-History etc. zusammen. Sprich, je mehr Gruppenmitgliedschaften ein Benutzer hat, desto größer wird das „Kerberos Token Size“.

Die maximale Kerberos-Ticket-Größe, sprich der Standardwert hinter MaxTokenSize ist von der Windows-Version abhängig.

In dieser Tabelle sind die Standardwerte für MaxTokenSize aufgelistet.

Betriebssystem MaxTokenSize
Standardeinstellung
[byte]
Win 2000 8.000
Win 2000 SP2 12.000
Win 2003 12.000
Win XP 12.000
Win Vista, Server 2008 12.000
Win 7, Server 2008 R2 12.000
Win 8, Server 2012 48.000
Win 8.1, Server 2012 R2 48.000
Win 10, Server 2016 48.000

Kerberos Ticketgröße überprüfen

Es gibt verschiedene Möglichkeiten und Skripte, um die Kerberos Ticketgröße zu überprüfen.

Das Microsoft-Kommandozeilentool „Tokensz.exe“ (wohl Bestandteil von „Windows Server 2008 Active Directory Resource Kit“) ist im Netz leider nicht mehr zu finden.

Viele kleine, einfache PowerShell Skripte aus dem Netz funktionierten nicht korrekt. Zumindest in einer Multidomänenumgebung haben diese, die Ticketgröße nicht korrekt berechnet.

Folgende zwei umfangreiche Skripte haben sich als funktional erwiesen.

CheckMaxTokenSize.ps1 (Vorgänger)

CheckMaxTokenSize.ps1 (Original Download von gallery.technet.microsoft.com)

CheckMaxTokenSize.ps1 (Kopie Download, falls die ursprüngliche Seite nicht mehr erreichbar)

  • Es können auch mehrere Benutzer zum Testen eingegeben werden.
  • Mit dem Schalter -OSEmulation kann man ein Betriebssystem auswählen, gegen die dann die ermittelte Token-Größe gecheckt wird.
  • Es wird auch ein Bericht (TXT-Datei) mit allen Gruppen und SID des Benutzers generiert.
  • Die Tokengröße wird scheinbar korrekt berechnet, das angezeigte Ergebnis (Grün/Rot, ob die ermittelte Tokengröße die Größe für das OS überschreitet) wird scheinbar nicht korrekt angezeigt. Der Token des Benutzers weit unter der MaxTokenSize-Grenze, wurde aber als Problem dargestellt.
  • Das Skript lief erst auf dem Server korrekt, der sich in der Domäne des Benutzers befand.

Das Skript für den einfachen Aufruf z.B. in das Benutzerprofil ablegen.
Dazu im Windows-Explorer %userprofile% in die Adressleiste eingeben.

# Beispielaufruf

# In das Benutzerprofil wechseln
cd ~

# TokenSize für einen Benutzer ausgeben
# Username muss durch den Benutzernamen ausgetauscht werden.
.\CheckMaxTokenSize.ps1 -Principals 'Username' -OSEmulation $true -Details $true

The specified network name is no longer available - Kerberos MaxTokenSize - CheckMaxTokenSize.ps1 - PowerShell Ausgabe

Get-TokenSizeReport.ps1 (Empfehlung)

Get-TokenSizeReport.ps1 (Original Download von http://www.jhouseconsulting.com)

Get-TokenSizeReport.ps1 (Kopie Download, falls die ursprüngliche Seite nicht mehr erreichbar)

Web.Archiv – Alternativ, falls die Homepage nicht erreichbar ist.

  • Änliche Summen wie das obere Skript.
  • Kann Ticketgröße eines Benutzers oder aller Benutzer einer Domäne anzeigen.
  • Generiert zwei CSV-Berichte mit Benutzern, die TokenSize von 6000 überschreiten und TOP-200 Benutzern.

Das Skript für den einfachen Aufruf z.B. in das Benutzerprofil ablegen.
Dazu im Windows-Explorer %userprofile% in die Adressleiste eingeben.

# Beispielaufruf für einen Benutzer

# In das Benutzerprofil wechseln
cd ~

# TokenSize für einen Benutzer ausgeben
# Username und domain.com müssen durch eigene Angaben ausgetauscht werden.
.\Get-TokenSizeReport.ps1 -AccountName:Username -TrustedDomain:domain.com

The specified network name is no longer available - Kerberos MaxTokenSize - Get-TokenSizeReport.ps1 -AccountName -TrustedDomain - PowerShell Ausgabe

 

# Beispielaufruf für eine Domäne

# In das Benutzerprofil wechseln
cd ~

# TokenSize für eine Domäne ausgeben
# Username und domain.com müssen durch eigene Angaben ausgetauscht werden.
.\Get-TokenSizeReport.ps1 -TrustedDomain:domain.com
The specified network name is no longer available - Kerberos MaxTokenSize - Get-TokenSizeReport.ps1 Domain Scan - PowerShell Ausgabe
Get-TokenSizeReport.ps1 Domain Scan

 

The specified network name is no longer available - Kerberos MaxTokenSize - Get-TokenSizeReport.ps1 Domain Scan - CSV Report - Sorted
TokenSizeReport.ps1 Domain Scan – CSV Report – Sorted

 

Fix – Wie behebe ich den MaxTokenSize Fehler?

MaxTokenSize Empfehlung für WebApplikation bzw. IIS maximal 48000 byte (wegen base64 encoding).

Für SharePoint und SQL-Datenbanken sind maximal 64000 byte möglich.

Absolutes Maximum ist: 65535 byte.

Variante 1 – Gruppenmitgliedschaften

Falls möglich sollte mal als eine schnelle Lösung die Gruppenmitgliedschaften und SID-History für den betroffenen Benutzer reduzieren.

Auch könnte es helfen, die Anzahl der Benutzer zu reduzieren, die für „trusted for delegation“ konfiguriert sind.

Variante 2 – Registry anpassen

Registrierungs-Editor öffnen.

Regedit.exe - Registrierungs-Editor - Icon

Zum öffnen kann z.B. folgende Tastenkombination verwendet werden.
[Win]+[r]regedit[Enter]

Zum folgenden Schlüssel navigieren:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters

Folgenden Registry-Schlüssel erzeugen (rechte Maustaste / Neu) :

  • Wertname: MaxTokenSize
  • Typ: DWORD-Wert (32-Bit)
  • Basis: Dezimal
  • Wert: 48000

The specified network name is no longer available - HKEY_LOCAL_MACHINE - SYSTEM - CurrentControlSet - Control - Lsa - Kerberos - Parameters - MaxTokenSize - 48000 - Regedit - Registry - Registrierungs-Editor

Server neustarten.

Variante 3 – GPO

Hinweis: Die GPO-Einstellungen setzen den oben erwähnten Reg-Key.

Der Wert für MaxTokenSize kann auch per (lokalen oder domänen) Gruppenrichtlinien (GPO) gesetzt werden.

Um die Einstellung lokal (auf dem Zielserver) zu setzen, den „Editor für lokale Gruppenrichtlinien“ öffnen z.B. per Tastenkombination
[Win]+[r]gpedit.msc[Enter]

Editor für lokale Gruppenrichtlinien - Local Group Policy Editor - Icon1

In Englischen Betriebssystemversion zum folgenden Punkt navigieren:

  • Computer Configuration
    • Administrative Templates
      • System
        • Kerberos
          • Set maximum Kerberos SSPI context token buffer size

In Deutschen Betriebssystemversion zum folgenden Punkt navigieren:

  • Computerkonfiguration
    • Administrative Vorlagen
      • System
        • Kerberos
          • Maximale Puffergröße für Kerberos-SSPI-Kontexttoken festlegen

Auf z.B. 48000 einstellen.

Beschreibung der GPO:

Mit dieser Richtlinieneinstellung können Sie den Wert festlegen, der an Anwendungen zurückgegebenen wird, die die maximale Größe des Puffers des SSPI-Kontexttokens anfordern.

Die Größe des Kontexttokenpuffers bestimmt die maximale Größe des von einer Anwendung erwarteten und zugeteilten SSPI-Kontexttokens. Abhängig von der Authentifizierungsanforderungverarbeitung und den Gruppenmitgliedschaften, kann der Puffer kleiner sein, als die tatsächliche Größe des SSPI-Kontexttokens.

Wenn Sie diese Gruppenrichtlinieneinstellung aktivieren, verwendet der Kerberos-Client oder -Server den konfigurierten Wert oder den lokal zulässigen Maximalwert, je nachdem, welcher kleiner ist.

Wenn Sie diese Gruppenrichtlinieneinstellung deaktivieren oder nicht konfigurieren, verwendet der Kerberos-Client oder -Server den lokal konfigurierten Wert oder den Standardwert.

Hinweis: Diese Richtlinieneinstellung konfiguriert den bestehenden MaxTokenSize-Registrierungswert unter „HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters“, der unter Windows XP und Windows Server 2003 hinzugefügt wurde, mit einem Standardwert von 12.000 Byte. Ab Windows 8 liegt der Standardwert bei 48.000 Byte. Aufgrund der Base64-Kodierung des Authentifizierungskontexttokens von HTTP, ist es nicht ratsam, einen Wert von über 48.000 Byte festzulegen.

The specified network name is no longer available - MaxTokenSize - gpedit.msc - Editor für lokale Gruppenrichtlinien - Maximale Puffergröße für Kerberos-SSPI-Kontexttoken festlegen - Set maximum Kerberos SSPI context token buffer size

Server neustarten.

Quellen

  1. sql-aus-hamburg.de: Login nicht möglich – Login Packet structurally invalid
  2. msxfaq.de: Kerberos Ticketsize und Gruppen
  3. support.microsoft.com: Problems with Kerberos authentication when a user belongs to many groups
  4. docs.microsoft.com: MSSQLSERVER_17832
  5. fileserver-tools.com: KnowHow: Was ist MaxTokenSize?
  6. gallery.technet.microsoft.com: Check for MaxTokenSize Problems (Updated)
  7. jhouseconsulting.com: Script to create a Kerberos Token Size Report

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert