Je me bats avec ça depuis 2 jours maintenant sans me rapprocher de la solution. J'ai lu 20-30 threads alteast et stil ne peut pas résoudre ce problème.
Sil te plait aide moi.
J'ai désactivé l'authentification anonyme, activé l'emprunt d'identité asp.net.
J'ai ajouté <identity impersonate = "true" />
J'ai ajouté un utilisateur aux identifiants de sécurité connectés à la base de données à laquelle j'essaie de me connecter
Voici la chaîne de connexion que j'utilise:
Data Source=IPTOSERVER;Initial Catalog=Phaeton;User Id=User;Password=Password;
message d'erreur:
Impossible d'ouvrir la base de données "Phaeton.mdf" demandée par la connexion. La connexion a échoué.
La connexion a échoué pour l'utilisateur "NT AUTHORITY\NETWORK SERVICE".
Le message d'erreur que vous recevez vous indique que l'application n'a pas réussi à se connecter à la base de données sqlexpress et non au serveur sql. Je vais juste changer le nom de la base de données dans le serveur sql, puis mettre à jour la chaîne de connexion en conséquence et réessayer.
Votre message d'erreur indique ce qui suit:
Cannot open database "Phaeton.mdf" requested by the login. The login failed.
Il me semble que vous essayez toujours de vous connecter à la base de données basée sur des fichiers, le nom "Phaeton.mdf" ne correspond pas à votre nouveau nom de base de données SQL "Phaeton".
J'espère que cela t'aides.
Je rencontrais un message d'erreur similaire que j'ai remarqué dans l'Observateur d'événements Windows qui disait:
La connexion a échoué pour l'utilisateur "NT AUTHORITY\NETWORK SERVICE". Motif: Échec de l'ouverture de la base de données explicitement spécifiée. [CLIENT: machine locale]
La solution qui a résolu mon problème était:
Voici une capture d'écran de ce qui précède:
Si le message d'erreur est juste
"La connexion a échoué pour l'utilisateur 'NT AUTHORITY\NETWORK SERVICE'.", Puis accordez l'autorisation de connexion pour 'NT AUTHORITY\NETWORK SERVICE'
en utilisant
"sp_grantlogin 'NT AUTHORITY\NETWORK SERVICE'"
sinon si le message d'erreur est comme
"Impossible d'ouvrir la base de données" Phaeton.mdf "demandée par la connexion. La connexion a échoué. La connexion a échoué pour l'utilisateur 'NT AUTHORITY\NETWORK SERVICE'."
essayez d'utiliser
"EXEC sp_grantdbaccess 'NT AUTHORITY\NETWORK SERVICE'"
sous votre base de données "Phaeton".
J'ai aimé la solution de Jed, mais le problème était que chaque fois que je construisais mon projet en mode débogage, il déploierait mon projet de base de données et supprimait à nouveau l'utilisateur. j'ai donc ajouté ce script MySQL au script post-déploiement. il fait pratiquement ce que Jed a dit mais crée l'utilisateur à chaque fois que je déploie.
CREATE USER [NT AUTHORITY\NETWORK SERVICE]
FOR LOGIN [NT AUTHORITY\NETWORK SERVICE]
WITH DEFAULT_SCHEMA = dbo;
Go
EXEC sp_addrolemember 'db_owner', 'NT AUTHORITY\NETWORK SERVICE'
La connexion SQL Server requise est DOMAIN\machinename$
. Voici comment l'appelant NT AUTHORITY\NETWORK SERVICE
apparaît à SQL Server (et aux serveurs de fichiers, etc.)
En SQL,
CREATE LOGIN [XYZ\Gandalf$] FROM WINDOWS
Vous avez dit que cela fonctionnait bien lorsque vous utilisiez l'édition SQL Express. Par défaut, les éditions express créent une instance nommée et s'exécutent dans NT Authority\Network Service.
Par défaut, SQL Server STD installe une instance par défaut et s'exécute dans NT Authority\SYSTEM.
Avez-vous à la fois l'édition SQL complète et l'édition Express installée sur la même machine?
Il se peut que la chaîne de connexion fasse toujours référence à l'instance nommée 'SQLEXPRESS' plutôt qu'à l'instance par défaut créée par la version complète.
Où est également définie la chaîne de connexion? Dans IIS ou votre code? Assurez-vous que s'ils sont définis à plusieurs endroits, tous pointent vers la même instance SQL et la même base de données.
Essayez également de regarder l'erreur détaillée présente dans les journaux d'erreurs SQL Server. Les erreurs enregistrées dans le journal des événements ne sont pas terminées pour des raisons de sécurité. Cela vous aidera également à savoir si la connexion a été établie avec le serveur SQL correct.
Assurez-vous également que la machine sur laquelle SQL est installé est accessible & IIS essaie d'accéder à la même machine. Dans mon entreprise, parfois en raison d'une mauvaise résolution de nom, la requête échoue car la plupart de nos ordinateurs ont SQL installé et la requête atterrit dans le mauvais serveur SQL.
Assurez-vous que la base de données existe dans SQL Server. Le nom affiché sous les bases de données dans SQL Management Studio doit correspondre à celui de la chaîne de connexion.
La meilleure façon est de créer un utilisateur pour votre application et d'attribuer les autorisations qui conviennent à cet utilisateur. N'utilisez pas 'NT AUTHORITY\NETWORK SERVICE' comme utilisateur, il a sa propre vulnérabilité et c'est un utilisateur qui a des autorisations pour tant de choses au niveau du système d'exploitation. Éloignez-vous de cet utilisateur intégré.
J'utilise Entity Framework pour renouveler ma base de données et les utilisateurs sont remplacés chaque fois que je génère ma base de données.
Maintenant, je l'exécute chaque fois que je charge un nouveau DBContext:
cnt.Database.ExecuteSqlCommand("EXEC sp_addrolemember 'db_owner', 'NT AUTHORITY\\NETWORK SERVICE'");