web-dev-qa-db-fra.com

Impossible d'ouvrir la base de données "test" demandée par le login. La connexion a échoué. Échec de la connexion pour l'utilisateur 'xyz\ASPNET'

J'ai créé un service Web qui enregistre des données dans db. Mais je reçois cette erreur:

Impossible d'ouvrir la base de données "test" demandée par le login. La connexion a échoué. La connexion a échoué pour l'utilisateur 'xyz\ASPNET'.

Ma chaîne de connexion est 

Data Source=.\SQLExpress;Initial Catalog=IFItest;Integrated Security=True
66
coure2011

Eh bien, l'erreur est assez claire, non? Vous essayez de vous connecter à votre serveur SQL avec l'utilisateur "xyz/ASPNET" - c'est le compte sous lequel votre application ASP.NET est en cours d'exécution.

Ce compte n'est pas autorisé à se connecter à SQL Server - créez une connexion sur SQL Server pour ce compte ou spécifiez un autre compte SQL Server valide dans votre chaîne de connexion.

Pouvez-vous nous montrer votre chaîne de connexion (en mettant à jour votre question d'origine)?

UPDATE: Ok, vous utilisez l'authentification Windows intégrée -> vous devez créer un identifiant SQL Server pour "xyz\ASPNET" sur votre serveur SQL Server ou modifier votre chaîne de connexion de la manière suivante:

connectionString="Server=.\SQLExpress;Database=IFItest;User ID=xyz;pwd=top$secret"

Si vous avez un utilisateur "xyz" avec un mot de passe "top $ secret" dans votre base de données.

38
marc_s
  • Soit: "xyz\ASPNET" n'est pas une connexion (dans sys.server_principals)
  • Ou: "xyz\ASPNET" est configuré mais n'est pas mappé à un utilisateur du test de la base de données (sys.database_principals)

J'irais pour la 2ème option: le message d'erreur implique que la base de données par défaut n'y est pas ou pas du tout, plutôt que d'être configurée en tant que login.

Pour tester s'il est configuré en tant que login 

SELECT SUSER_ID('xyz\ASPNET') -- (**not** SUSER_SID)

Si NULL

CREATE LOGIN [xyz\ASPNET] FROM WINDOWS

Si non NULL

USE test
GO
SELECT USER_ID('xyz\ASPNET')

Si NULL

USE test
GO
CREATE USER [xyz\ASPNET] FROM LOGIN [xyz\ASPNET]
19
gbn

La meilleure solution au problème de connexion consiste à créer un utilisateur de connexion dans sqlServer. Voici les étapes à suivre pour créer une connexion SQL Server utilisant l'authentification Windows (SQL Server Management Studio):

  1. Dans SQL Server Management Studio, ouvrez l'Explorateur d'objets et développez le dossier de l'instance de serveur dans laquelle créer le nouveau login.
  2. Cliquez avec le bouton droit sur le dossier Sécurité, pointez sur Nouveau, puis cliquez sur Connexion.
  3. Sur la page Général, entrez le nom d'un utilisateur Windows dans la zone Nom de connexion. 
  4. Sélectionnez Authentification Windows.
  5. Cliquez sur OK.

Par exemple, si le nom d'utilisateur est xyz\ASPNET, entrez ce nom dans la zone Nom de connexion.

Vous devez également modifier le mappage utilisateur pour autoriser l'accès à la base de données à laquelle vous souhaitez accéder.

8
Rajeev

La plupart du temps, ce n'est pas un problème de connexion, mais un problème de création de la base de données elle-même. Donc, s'il y a une erreur lors de la création de votre base de données, celle-ci ne sera pas créée en premier lieu. Dans ce cas, si vous essayez de vous connecter, quel que soit l'utilisateur, la connexion échouera. Cela se produit généralement en raison d'une mauvaise interprétation logique du contexte de la base de données.

Visitez le site dans un navigateur et lisez VRAIMENT ces journaux d'erreurs. Cela peut vous aider à repérer le problème avec votre code (généralement des problèmes de logique en conflit avec le modèle).

Dans mon cas, le code compilé correctement, le même problème de connexion, alors que je téléchargeais encore le studio de gestion, j’ai parcouru le journal des erreurs, corrigé mes contraintes de contexte de base de données et le site a commencé à fonctionner correctement.

6
Justice O.

J'ai eu ce problème et ce qui l'a résolu pour moi était de:

  • Accédez aux pools d'applications dans IIS
  • Faites un clic droit sur le pool d'applications de mon projet
  • Section en cours de modèle ouvert Identité
  • Choisissez l'option de compte personnalisé
  • Entrez votre nom d'utilisateur et votre mot de passe.
6
ParPar

Le problème

L'erreur se présente comme un message semblable à ceci:

Impossible d'ouvrir la base de données "DATABASE NAME" demandée par le login. Le login échoué. La connexion a échoué pour l'utilisateur XYZ.

  • L'erreur ne peut généralement pas être corrigée par un simple redémarrage de Visual Studio ou par un ordinateur complet.
  • L'erreur peut également être trouvée sous la forme d'un fichier de base de données apparemment verrouillé.

Le correctif

La solution est posée dans les étapes suivantes. Vous ne perdrez aucune donnée dans votre base de données et vous ne devriez pas supprimer votre fichier de base de données!

Pré-requis: Vous devez avoir installé SQL Server Management Studio (Full ou Express).

  1. Ouvrez SQL Server Management Studio
  2. Dans la fenêtre "Connexion au serveur" (Fichier-> Explorateur d'objets connectés), entrez les informations suivantes:
    • Type de serveur: Moteur de base de données
    • Nom du serveur: (localdb)\v11.0
    • Authentification: [Tout ce que vous avez utilisé lors de la création de votre base de données locale. Probablement l'authentification Windows).
  3. Cliquez sur "Connecter"
  4. Développez le dossier "Bases de données" dans l'explorateur d'objets (Affichage-> Explorateur d'objets, F8)
  5. Trouvez votre base de données. Il doit être nommé comme chemin d'accès complet à votre fichier de base de données (.mdf)
    • Vous devriez voir qu'il est écrit "(en attente de récupération)" à la fin du nom de la base de données ou lorsque vous essayez de développer la base de données, il ne pourra pas vous envoyer de message d'erreur.
    • C'est le problème! Votre base de données s'est écrasée essentiellement ..
  6. Faites un clic droit sur la base de données puis sélectionnez "Tâches -> Détacher ...".
  7. Dans la fenêtre de détachement, sélectionnez votre base de données dans la liste et cochez la colonne "Supprimer les connexions".
  8. Cliquez sur OK.
  9. Vous devriez voir la base de données disparaître de la liste des bases de données. Votre problème devrait maintenant être corrigé. Allez lancer votre application qui utilise votre localdb.
  10. Après avoir exécuté votre application, votre base de données réapparaîtra dans la liste des bases de données. C'est correct. Il ne devrait plus dire "En attente de récupération" car il devrait fonctionner correctement.

La source de la solution:https://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed

3
Anton Lyhin

Pour moi, la base de données n'a pas été créée et le code EF doit d'abord l'avoir créée mais elle doit toujours se terminer avec cette erreur. La même chaîne de connexion fonctionnait dans le projet Web par défaut d'aspnet Core. La solution était d'ajouter

_dbContext.Database.EnsureCreated()

avant le premier contact avec la base de données (avant l'ensemencement dans la base de données). 

3
cyptus

J'ai utilisé l'authentification Windows pour me connecter au fichier .mdf de la base de données locale etmon serveur local était serveur SQL 2014 .

string sqlString = " Data Source = (LocalDB)\\MSSQLLocalDB;" + "AttachDbFilename = F:\\.........\\myDatabase.mdf; Integrated Security = True; Connect Timeout = 30";
2
Ehsan

La meilleure option serait d'utiliser l'authentification intégrée Windows, car elle est plus sécurisée que l'authentification SQL. Créez un nouvel utilisateur Windows sur le serveur SQL avec les autorisations nécessaires et modifiez l'utilisateur IIS dans les paramètres de sécurité du pool d'applications.

1
Giorgi

Je n'ai pas vu cela mentionné dans les numéros précédents, alors laissez-moi vous proposer une autre possibilité. Il se pourrait que IFItest ne soit pas accessible ou n’existe tout simplement pas. Par exemple, si l'une d'entre elles possède plusieurs configurations, chacune avec sa propre base de données, il se peut que le nom de la base de données n'ait pas été changé pour celui qui convient pour la configuration actuelle. 

1
demongolem

J'ai essayé de mettre à jour l'utilisateur, et cela a fonctionné. Voir la commande ci-dessous.

USE ComparisonData// databaseName
EXEC  sp_change_users_login @Action='update_one', @UserNamePattern='ftool',@LoginName='ftool';

Il suffit de remplacer user('ftool') en conséquence.

1
shashank

Inspiré par la réponse de cyptus que j'ai utilisée

_dbContext.Database.CreateIfNotExists();

sur EF6 avant le premier contact avec la base de données (avant l’amorçage de la base de données).

1
Jesse Hufstetler

Cela arrive aussi quand vous tapez un nom incorrect de DB

ex : xxx-db-dev to xxx-dev-db

Parfois, c'est juste une erreur stupide. Je prends plus de 1 heure pour découvrir ceci :( parce que je viens d’essayer beaucoup de chose difficile en premier 

1
Grey Wolf

Si vous n'avez pas créé la base de données sur votre serveur, vous obtiendrez la même erreur de connexion. Assurez-vous que la base de données existe avant de vous connecter.

0
AmirHossein Rezaei

Dans mon cas, l'application asp.net peut généralement se connecter à la base de données sans aucun problème. J'ai remarqué un tel message dans les journaux. Je active les journaux du serveur SQL et je découvre ce message:

2016-10-28 10:27:10.86 Logon       Login failed for user '****'. Reason: Failed to open the explicitly specified database '****'. [CLIENT: <local machine>]
2016-10-28 10:27:13.22 Server      SQL Server is terminating because of a system shutdown. This is an informational message only. No user action is required.

Il semble donc que le serveur était en train de redémarrer et que le serveur SQL s'était arrêté un peu plus tôt que l'application ASP.NET et que la base de données n'était pas disponible pendant quelques secondes avant le redémarrage du serveur.

0
Tomas Kubes

Cela fonctionne pour moi.

  1. Allez dans SQL Server >> Sécurité >> Connexions, cliquez avec le bouton droit de la souris sur NT AUTHORITY\NETWORK SERVICE et sélectionnez Propriétés.
  2. Dans l'écran nouvellement ouvert des propriétés de connexion, accédez à l'onglet «Cartographie de l'utilisateur». 
  3. Ensuite, sous l'onglet «User Mapping», sélectionnez la base de données souhaitée, en particulier la base de données pour laquelle ce message d'erreur est affiché. 
  4. Cliquez sur OK.

Lire ce blog.

http://blog.sqlauthority.com/2009/08/20/sql-server-fix-error-cannot-open-database-requested-by-the-login-the-login-failed-failed-failed-failed- for-user-nt-Authoritynetwork-service/

0
Kamran

Même si vous avez défini la connexion en tant que propriétaire de la base de données et le mappage utilisateur pour la base de données qui utilisera la connexion, vérifiez que l'utilisateur de la base de données réel (et pas uniquement la connexion) a le rôle de "propriétaire".

0
Chris Halcrow

J'ai constaté que je devais également définir l'option UserMapping lors de la création d'un nouveau login, ce qui a résolu le problème pour moi. J'espère que cela aidera tous ceux qui se sont retrouvés coincés ici!

Edit: définir le login en tant que propriétaire de la base de données a également résolu le problème suivant.

0
DevDave

Dans mon cas, j'exécutais un service Windows sous l'identité "Système". L'erreur était:

System.Data.SqlClient.SqlException (0x80131904): 
Cannot open database "MyDbName" requested by the login. The login failed.
Login failed for user 'MYDOMAINNAME\HOSTNAME$'.

Le problème est que l'erreur est très trompeuse. Même après avoir ajouté "MYDOMAINNAME\HOSTNAME $" à la connexion à la base de données et lui avoir accordé l'accès sysadmin, puis ajouté un utilisateur pour cette connexion sur ma base de données cible et l'avoir rendu dbowner, la même erreur se produisait. Apparemment, je devais faire la même chose pour la connexion 'NT AUTHORITY\SYSTEM'. Après cela, j'ai pu me connecter sans problème. Je ne sais pas pourquoi le message d'erreur se plaint de 'MYDOMAINNAME\HOSTNAME $'. J'ai supprimé cette connexion et l'utilisateur correspondant et tout fonctionne toujours.

0
Greg Z.

Parfois, ce problème peut apparaître si vous ouvrez cette base de données sur un autre serveur SQL (par exemple, vous lancez SQL Management Studio (SMS) et ajoutez cette base de données) sans oublier d'arrêter ce serveur. En conséquence, votre application tente de se connecter avec un utilisateur déjà connecté à cette base de données sous un autre serveur. Pour résoudre ce problème, essayez d'arrêter ce serveur par Config. serveur SQL répartiteur. 

Toutes mes excuses pour le mauvais anglais ., Cordialement, Ignat.

0
user3041948

NB: Si vous utilisez un service Windows pour héberger le service Web.

Vous devez vous assurer que votre service Web utilise le bon compte de connexion pour vous connecter à SQL Server.

  • Services ouverts (je suppose que le service Windows a été installé)
  • Faites un clic droit sur le service et allez aux propriétés.
  • Cliquez sur l'onglet "Connexion"
  • Cliquez sur le bouton radio "Ce compte" 
  • Cliquez sur "Parcourir"
  • Entrez le nom d'utilisateur du PC dans le champ de texte et cliquez sur le bouton "Vérifier le nom" à droite.
  • Cliquez sur le texte dans le champ de texte, appuyez sur le bouton "OK"
  • entrer le mot de passe de connexion et appliquer
0
Koki Monoto