web-dev-qa-db-fra.com

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

Message affiché par la visionneuse du fichier journal 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 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.

24
Pete Oakey

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 dans le Aaron Bertrand blog .

25
Pete Oakey

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.

4
Rob Bowman

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 être 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
Bill W.

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 sur faux, tout allait bien.

2
Dick Vandenberg

@ Pete Oakly est sur la bonne piste 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 la connexion qui échoue en soi, c'est la base de données à laquelle j'essaie d'accéder. Il 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.

2
John Dyer

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
Nasser

Dans notre cas, dans le Gestionnaire de configuration SQL Server | Configuration réseau SQL Server | TCP/IP | IP | Le TCP port était PAS 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, il lançait une connexion jdbc, puis nous repéré dans SQL Server Consigner l'erreur: Échec de la connexion pour l'utilisateur "xxxx": raison Échec de l'ouverture de la base de données définie explicite, 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" 

Cela pour dire que aussi dans la configuration réseau de 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
Sti

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 dans Sécurité, faites un clic droit sur Connexions 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 à nouveau sur OK et OK .

Sur la même fenêtre de connexion, cliquez sur Rôles du 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 à ser Mapping et fournissez l'accès selon vos besoins.

Vérifiez l'état de la base de données: Permission: Grant Login: Enabled

Cliquez sur OK

1
Priyanka