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
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
# 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


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.
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
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]
In Englischen Betriebssystemversion zum folgenden Punkt navigieren:
- Computer Configuration
- Administrative Templates
- System
- Kerberos
- Set maximum Kerberos SSPI context token buffer size
- Kerberos
- System
- Administrative Templates
In Deutschen Betriebssystemversion zum folgenden Punkt navigieren:
- Computerkonfiguration
- Administrative Vorlagen
- System
- Kerberos
- Maximale Puffergröße für Kerberos-SSPI-Kontexttoken festlegen
- Kerberos
- System
- Administrative Vorlagen
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.
Server neustarten.
Quellen
- sql-aus-hamburg.de: Login nicht möglich – Login Packet structurally invalid
- msxfaq.de: Kerberos Ticketsize und Gruppen
- support.microsoft.com: Problems with Kerberos authentication when a user belongs to many groups
- docs.microsoft.com: MSSQLSERVER_17832
- fileserver-tools.com: KnowHow: Was ist MaxTokenSize?
- gallery.technet.microsoft.com: Check for MaxTokenSize Problems (Updated)
- jhouseconsulting.com: Script to create a Kerberos Token Size Report