Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Exceptions lors de la connexion à SQL Server
Plusieurs raisons peuvent expliquer l’échec de l’établissement de la connexion. Voici des conseils de résolution des problèmes qui peuvent être utilisés comme guide pour analyser et résoudre de nombreux problèmes.
Impossible de charger la bibliothèque SNI native (interface réseau du serveur)
Problèmes dans les applications .NET Framework
Stacktrace observed:
TypeInitializationException: The type initializer for 'Microsoft.Data.SqlClient.SNILoadHandle' threw an exception.
DllNotFoundException: Unable to load DLL 'Microsoft.Data.SqlClient.SNI.x64.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
TypeInitializationException: The type initializer for 'Microsoft.Data.SqlClient.SNILoadHandle' threw an exception.
DllNotFoundException: Unable to load DLL 'Microsoft.Data.SqlClient.SNI.x86.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
SNI est la bibliothèque C++ native dont SqlClient dépend pour diverses opérations de réseau lors de l’exécution sur Windows. Dans des applications .NET Framework générées avec le kit de développement logiciel (SDK) de projet MSBuild, les DLL natives ne sont pas gérées avec les commandes de restauration. Par conséquent, un .targets fichier est inclus dans le Microsoft.Data.SqlClient.SNI package NuGet qui définit les opérations « Copier » nécessaires.
Le fichier inclus .targets est référencé automatiquement lorsqu’une dépendance directe est apportée à la Microsoft.Data.SqlClient bibliothèque. Dans les scénarios où une référence transitive (indirecte) est faite, ce .targets fichier doit être référencé manuellement pour s’assurer que les opérations « Copier » peuvent s’exécuter si nécessaire.
Solution recommandée : Vérifiez que le .targets fichier est référencé dans le fichier projet de l’application pour vous assurer que les opérations « Copier » sont exécutées. Vous trouverez un exemple de modifications d’un fichier projet dans ce problème GitHub associé.
Ces cibles couvrent uniquement les cibles connues et couramment utilisées par Microsoft. Si un outil externe ou une application définit des cibles personnalisées pour copier des fichiers binaires, de nouvelles cibles doivent être définies par les maintenances d’outils pour garantir que les DLL SNI natives sont copiées en même temps que les Microsoft.Data.SqlClient.dll fichiers binaires et sont disponibles lors de l’exécution d’applications clientes.
Problèmes dans les applications .Net Core
Stacktrace observed:
System.TypeInitializationException: The type initializer for 'Microsoft.Data.SqlClient.TdsParser' threw an exception.
---> System.TypeInitializationException: The type initializer for 'Microsoft.Data.SqlClient.SNILoadHandle' threw an exception.
---> System.DllNotFoundException: Unable to load shared library 'Microsoft.Data.SqlClient.SNI.dll' or one of its dependencies.
Note
Cette erreur peut se produire uniquement sur les applications Windows. Si elle se produit dans un environnement UNIX, vous devez vous assurer que votre application est générée pour cibler de manière appropriée un runtime UNIX et non pour Windows.
SNI est la bibliothèque C++ native dont SqlClient dépend pour diverses opérations de réseau lors de l’exécution sur Windows. Microsoft.Data.SqlClient ne gère pas le chargement/déchargement de cette bibliothèque dans .NET Core.
Solution recommandée : Vérifiez que les autorisations « Exécuter » sont accordées sur le système de fichiers dans lequel les bibliothèques de runtime natives sont chargées dans le processus .NET Core. Si cela ne résout pas le problème, vous pouvez envoyer un problème dans le référentiel dotnet/runtime pour obtenir un support supplémentaire.
Erreurs de SNI native (PDB introuvable)
Stacktrace observed:
An assembly specified in the application dependencies manifest (sql2csv.deps.json) was not found:
package: 'Microsoft.Data.SqlClient.SNI.runtime', version: '2.0.0'
path: 'runtimes/win-x64/native/Microsoft.Data.SqlClient.SNI.pdb'
Solution recommandée : Vérifiez que l'application cliente fait référence au minimum à la version v2.1.0 version du package Microsoft.Data.SqlClient. Lorsque vous utilisez EF Core, ajoutez directement une référence à cette version du paquet Microsoft.Data.SqlClient afin de remplacer la dépendance.
Erreurs de la résolution du nom d’hôte
Stacktrace observed:
Microsoft.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible.
Verify that the instance name is correct and that SQL Server is configured to allow remote connections.
(provider: TCP Provider, error: 0 - No such host is known.)
Microsoft.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible.
Verify that the instance name is correct and that SQL Server is configured to allow remote connections.
(provider: TCP Provider, error: 35 - An internal exception was caught)
Microsoft.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible.
Verify that the instance name is correct and that SQL Server is configured to allow remote connections.
(provider: TCP Provider, error: 35 - An internal exception was caught)
---> System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (00000005, 0xFFFDFFFF): Name does not resolve
Possible reasons
Le protocole TCP/canaux nommés n’est pas activé sur SQL Server
Solution recommandée : Activez le protocole TCP/canaux nommés sur l'instance SQL à partir de la console Gestionnaire de configuration SQL Server.
Nom d’hôte non connu
Solution recommandée : Assurez-vous que le nom d'hôte correspond à l'adresse IP du serveur à partir du client où la connexion est lancée.
Login-phase errors
Stacktraces observed:
Microsoft.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server, but then an error occurred during the pre-login handshake.
(provider: SSL Provider, error: 31 - Encryption(ssl/tls) handshake failed)
System.IO.EndOfStreamException: End of stream reached
A connection was successfully established with the server, but then an error occurred during the login process.
(provider: SSL Provider, error: 0 - The target principal name is incorrect.)
Microsoft.Data.SqlClient.SqlException (0x80131904): Connection Timeout Expired. The timeout period elapsed during the post-login phase. The connection could have timed out while waiting for server to complete the login process and respond; Or it could have timed out while attempting to create multiple active connections.
The duration spent while attempting to connect to this server was - [Pre-Login] initialization=837; handshake=394; [Login] initialization=3; authentication=15; [Post-Login] complete=1027;
---> System.ComponentModel.Win32Exception (258): Unknown error 258
at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction)
Causes et solutions possibles
SQL Server ne prend pas en charge TLS 1.2
Cette erreur se produit généralement dans les environnements clients tels que les conteneurs d’images de l’ancrage, les clients UNIX ou les clients Windows où TLS 1.2 est le protocole TLS minimal pris en charge.
Solution recommandée : Installez les dernières mises à jour sur les versions prises en charge de SQL Server et vérifiez que le protocole TLS 1.2 est activé sur le serveur.
Note
Affichez le cycle de vie du pilote SqlClient pour obtenir la liste des versions de SQL Server prises en charge avec différentes versions de
Microsoft.Data.SqlClient.Solution non sécurisée : Configurez les paramètres TLS/SSL dans l'environnement client/image de Docker pour la connexion avec TLS 1.0.
MinProtocol = TLSv1 CipherString = DEFAULT@SECLEVEL=1Note
Lors de la connexion avec
Microsoft.Data.SqlClientv2.0+ à partir d’un environnement Windows/Linux avec TLS 1.0 ou TLS 1.1, un message d’avertissement de sécurité est levée si le serveur SQL Server cible et le client ne peuvent pas négocier un minimum de TLS version 1.2 lors de l’établissement de la connexion :Security Warning: The negotiated <TLS1.0 | TLS1.1> is an insecure protocol and is supported for backward compatibility only. The recommended protocol version is TLS 1.2 and later.Chiffrement appliqué SQL Server
Si le serveur cible est une instance Azure SQL ou SQL Server sur site avec la propriété « Forcer le chiffrement » activée, une connexion chiffrée est établie, pour laquelle le client doit établir une relation de confiance avec le serveur.
Solution recommandée : Deux options sont disponibles pour résoudre ce problème :
- Installez le certificat TLS de SQL Server cible dans l’environnement client. Il est validé si le chiffrement est nécessaire.
- (Moins sécurisé) Définissez la propriété « TrustServerCertificate=true » dans la chaîne de connexion.
Solution non sécurisée : Désactivez le paramètre « Forcer le chiffrement » sur SQL Server.
Certificats TLS non signés avec SHA-256 ou version ultérieure.
Solution recommandée : Générez un nouveau certificat TLS pour le serveur dont le hachage est signé avec au moins l’algorithme de hachage SHA-256.
Suites de chiffrement très restreintes sur Linux avec .NET 5 et versions ultérieures
.NET 5 a introduit un changement cassant pour les clients Linux, où une liste très restreinte de suites de chiffrement autorisées est utilisée par défaut. Vous devrez peut-être développer la liste de suite de chiffrement par défaut pour accepter les clients hérités (ou pour contacter les serveurs hérités) en spécifiant une
CipherSuitePolicyvaleur ou en modifiant le fichier de configuration OpenSSL .En savoir plus sur les suites de chiffrement TLS par défaut pour .NET sur Linux pour obtenir une action recommandée.
Microsoft.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - The certificate chain was issued by an authority that is not trusted.) ---> System.ComponentModel.Win32Exception (0x80090325): The certificate chain was issued by an authority that is not trusted.Chiffrement appliqué SQL Server
Si le serveur cible est une instance SQL Server locale avec la propriété « Forcer le chiffrement » activée et un certificat auto-signé, une connexion chiffrée est établie, pour laquelle le client doit établir une relation de confiance avec le serveur.
Solution recommandée : Deux options sont disponibles pour résoudre ce problème :
- Installez le certificat TLS de SQL Server cible dans l’environnement client. Il est validé si le chiffrement est nécessaire.
- (Moins sécurisé) Définissez la propriété « TrustServerCertificate=true » dans la chaîne de connexion.
Solution non sécurisée : Désactivez le paramètre « Forcer le chiffrement » sur SQL Server.
Erreurs pool de connexions épuisé
Trace de pile observée :
System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool.
This may have occurred because all pooled connections were in use and max pool size was reached.
Causes et solutions possibles
L’application cliente ouvre plus de connexions que le pool de connexions peut conserver active à un moment donné.
Solution recommandée : Configurez la propriété de connexion « Taille maximale du pool » sur une valeur supérieure et fermez les connexions inutilisées en temps opportun.
Contact Support
Si ce guide ne résout pas vos problèmes de connectivité, vous pouvez afficher les problèmes existants dans le référentiel dotnet/sqlclient et ouvrir un nouveau problème si nécessaire.