Échec de la connexion pour l'utilisateur - Erreur 18456 - Gravité 14, état 38


23

Message affiché par la visionneuse de fichiers journaux SQL Server:

Login failed for user [User]
Error: 18456, Severity: 14, State 38

Ce que cela signifie réellement:

Failed to open the explicitly specified database

Ma question:

Existe-t-il une liste quelque part de toutes les variantes des erreurs 18456 (échec de la connexion), pour chaque combinaison de gravité et d'état, avec le texte de description utile?

J'ai eu un Google, mais je ne trouve rien d'autre que des combinaisons spécifiques.

Réponses:


25

Codes d'État et leur signification.

1      'Account is locked out'
2      'User id is not valid'
3-4    'Undocumented'
5      'User id is not valid'
6      'Undocumented'
7      'The login being used is disabled'
8      'Incorrect password'
9      'Invalid password'
10     'Related to a SQL login being bound to Windows domain password policy enforcement.
        See KB925744.'
11-12  'Login valid but server access failed'
16     'Login valid, but not permissioned to use the target database'
18     'Password expired'
27     'Initial database could not be found'
38     'Login valid but database unavailable (or login not permissioned)'

Des informations plus détaillées sont disponibles sur le blog d' Aaron Bertrand .


@PeteOakly vous êtes sur la bonne voie ici pour l'état 38. Voir le post ci-dessous sur une base de données manquante comme l'une des raisons de l'état 38.
John Dyer

4

J'ai eu la même erreur avec le code d'état 38 provoquée par une faute de frappe du nom de la base de données dans la chaîne de connexion.


2

Voici ce que j'ai trouvé lorsque j'ai résolu cette erreur: j'avais créé des connexions SQL à l'aide de la connexion Windows et non du nom d'utilisateur et du mot de passe. Je ne sais pas vraiment quoi ni comment c'est arrivé, mais c'est arrivé. Je les ai supprimés puis reconstruit mes modèles d'entité. J'ai utilisé une autre chaîne de connexion que je savais bonne, et tout est joie. La clé est Persist Security Info = True, qui ne fonctionnera pas sur un réseau ou un site Web externe


2

J'avais aussi 18456 avec l'état 38. Il s'est avéré que la chaîne de connexion avait «sécurité intégrée = vrai», ce qui n'était pas ce que je voulais. La chaîne de connexion contenait l'ID utilisateur et le mot de passe qui devaient être utilisés. Quand j'ai changé le réglage en faux, tout allait bien.


2

J'ai eu cette erreur en essayant de me connecter à un serveur SQL avec plusieurs instances. La chaîne de connexion n'a pas nommé d'instance. Une fois que j'ai nommé l'instance (SERVERNAME \ INSTANCENAME), j'ai réussi à me connecter au serveur.


2

@Pete Oakly est sur la bonne voie avec la liste des codes d'état. Plus précisément, c'est le code qui nous intéresse tous:

38 'Connexion valide mais la base de données n'est pas disponible (ou connexion non autorisée)'

Mon problème a commencé dans un journal d'erreurs C #:

Exception | PublishedException | 000161 | 10/29/2018 | 11: 06: 40.210 | 16284 | InnerException | Impossible d'ouvrir la base de données "InterestingDataBaseName" demandée par la connexion. La connexion a échoué. La connexion a échoué pour l'utilisateur «CORP \ anyuser».

Mes yeux étaient concentrés sur la partie "Échec de la connexion" . Mon utilisateur était sa pour ce serveur de base de données, comment la connexion pourrait-elle éventuellement échouer?

Je suis tombé sur ce post par un trio de programmeurs qui avait la réponse: https://justaprogrammer.net/2012/12/09/a-misleading-sql-error-message-error-18456-severity-14-state-38 /

Ce n'est pas l'échec de la connexion en soi, c'est la base de données à laquelle j'essaie d'accéder. Ça n'existe pas!

Bingo! J'avais changé le nom de la base de données pour d'autres raisons et je n'ai pas mis à jour le fichier de configuration. Correction du nom de la base de données et les choses fonctionnent à nouveau comme un charme.


1

Dans notre cas, dans le Gestionnaire de configuration SQL Server | Configuration réseau SQL Server | TCP / IP | IP | Le port TCP n'a PAS été défini.

Sans cela, nous pourrions établir une connexion ODBC et même utiliser une connexion SQL Management Studio à distance et nous connecter avec l'utilisateur. Cependant, chaque fois que nous accédions à l'URL de notre application Tomcat, elle lance une connexion jdbc, puis nous repérons dans le journal SQL Server l'erreur: La connexion a échoué pour l'utilisateur 'xxxx': raison Échec de l'ouverture de la base de données définie explicitement, erreur 18456, gravité 14 , État 38

Voici un résumé de la chaîne de connexion jdbc

"jdbc:sqlserver://10.10.10.10:1433;databaseName=zzzzzzz" username="yyyyyy" password="xxxxxx" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" defaultAutoCommit="true"/>
<Resource name="jdbc/application" 

Ceci pour dire que aussi dans la configuration réseau SQL Server | Protocoles pour <nom d'instance> | Les tuyaux nommés doivent être ACTIVÉS et le nom du tuyau \\.\pipe\MSSQL$<instance name>\sql\query doit être défini correctement.


1

Eh bien, c'est une erreur liée à l'autorisation de base de données. J'ajoute ma solution à cette question car, il est très important de comprendre le rôle du DBA. Donc, voici mes suggestions:

  • Accédez au Gestionnaire de serveur
  • Sélectionnez Outils, puis Gestion de l'ordinateur
  • Vérifiez les utilisateurs et les groupes locaux
  • Vérifiez le nom de l'administrateur avec la description «Compte intégré pour l'administration de l'ordinateur / domaine»

Maintenant, connectez-vous avec ce nom d'utilisateur et vous pouvez accorder l'accès à l'utilisateur. Faire cela:

Allez à la sécurité , faites un clic droit sur Logins et sélectionnez Nouvelle connexion

Dans la fenêtre de connexion, vous pouvez saisir le nom d'utilisateur ou le rechercher. Sélectionnez l'utilisateur dans la liste et cliquez de nouveau sur OK puis sur OK .

Dans la même fenêtre de connexion, cliquez sur les rôles de serveur et accordez l'accès à l'utilisateur sélectionné comme: sysadmin, serveradmin, decreator etc; cliquez sur OK .

Si vous souhaitez accorder l'accès à une base de données individuelle, accédez à User Mapping et fournissez l'accès selon vos besoins.

Vérifiez l'état de la base de données: Autorisation: Accorder la connexion: activé

Cliquez OK


2
Cela pourrait être une assez bonne réponse si vous pouviez mettre l'accent sur la possibilité d'un manque Connexion SQL Server à la base de données utilisateur relation ou la possibilité que le login SQL Server de base de données par défaut est plus disponible. Actuellement, votre réponse n'est qu'une recommandation généralisée sur la façon de créer un compte. Je ne sais pas comment la première partie de votre réponse pourrait aider à résoudre le problème d'OP. Pourriez-vous expliquer cette partie?
John aka hot2use
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.