483 votes

Echec de la connexion pour l'utilisateur 'IIS APPPOOL \ASP.NET v4.0'

J'ai un projet web (C# Asp.Net, EF 4, MS SQL 2008 et IIS 7) et j'ai besoin de le migrer vers IIS 7 localement (pour le moment, il fonctionne bien avec CASSINI).

Localement, dans IIS, j'ai mon Default Web Site avec mon déploiement. Mon déploiement et Default Web Site sont sur le pool ASP.NET v4.0 (regardez l'image pour les paramètres) le pool cible Framework 4 comme mon projet web. Pool Settings Lors de la visite du site, le navigateur ne montre pas la page et permet au navigateur de télécharger la page à la place.

J'ai d'autres projets qui tournent sur IIS localement et qui fonctionnent sans problème (mais ils n'utilisent pas Entity Framework).

En utilisant le journal des événements, je vois des erreurs comme ci-dessous :

Exception information: 
    Exception type: EntityException 
    Exception message: The underlying provider failed on Open.
   at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)

    Login failed for user 'IIS APPPOOL\ASP.NET v4.0'.
       at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
       at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
       at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
       at System.Data.SqlClient.SqlConnection.Open()
       at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)

Question connexe

MISE À JOUR : Vous pouvez lire dans les ressources sur cette question que les permissions doivent être accordées sur MS SQL 2008 manuellement comme arift l'explique dans sa réponse. En utilisant IIS 7.5 et MS SQL 2008 R2, il ne devrait pas être nécessaire de définir manuellement les autorisations.

2 votes

Avez-vous autorisé l'identité du pool d'applications sur le dossier du site web ?

0 votes

Je ne suis pas sûr, pourriez-vous me dire comment faire ?

1 votes

664voto

adrift Points 24386

On dirait que ça échoue en essayant d'ouvrir une connexion à SQL Server.

Vous devez ajouter un login au serveur SQL pour IIS APPPOOL\ASP.NET v4.0 et accorder des permissions à la base de données.

Dans SSMS, sous le serveur, développez Sécurité, puis cliquez à droite sur Logins et sélectionnez "New Login...".

Dans la boîte de dialogue Nouvelle connexion, entrez le pool d'applications comme nom de connexion et cliquez sur "OK".

enter image description here

Vous pouvez ensuite cliquer avec le bouton droit de la souris sur le login du pool d'applications, sélectionner Propriétés et choisir "User Mapping". Vérifiez la base de données appropriée, et les rôles appropriés. Je pense que vous pouvez simplement sélectionner db_datareader y db_datawriter mais je pense que vous devrez toujours accorder des autorisations pour exécuter les procédures stockées si vous le faites via EF. Vous pouvez vérifier les détails des rôles aquí .

9 votes

Merci, j'ai fait ce que vous avez dit, mais maintenant je reçois cette erreur : Impossible d'ouvrir la base de données "SiteNameExtension" demandée par le login. La connexion a échoué. La connexion a échoué pour l'utilisateur 'IIS APPPOOL \DefaultAppPool '.

89 votes

TRÈS IMPORTANT : NE CLIQUEZ PAS SUR RECHERCHE POUR ESSAYER DE CONFIRMER LE LOGIN ! Il ne le reconnaîtra pas mais il fonctionnera. Il suffit de le taper comme IIS APPPOOL \SimonsAppPoolName. Voir ceci stackoverflow.com/questions/1933134

7 votes

Il est préférable de remplacer 'Identity' par 'LocalSystem' dans IIS, comme décrit dans la réponse suivante.

364voto

Teddy Points 4135

Vous pouvez modifier l'ApplicationPoolIdentity à partir de IIS7 -> Application Pools -> Advanced Settings. AdvancedSettings

Sous ApplicationPoolIdentity, vous trouverez le système local. Cela permettra à votre application de fonctionner sous NT AUTHORITY\SYSTEM qui est un login existant pour la base de données par défaut.

Edit : Avant d'appliquer cette suggestion, vous devez noter et comprendre les implications en matière de sécurité.

56 votes

@GibboK, Si vous êtes préoccupé par la sécurité, ne le faites pas. Voir technet.microsoft.com/fr/us/library/dd378907(v=WS.10).aspx

0 votes

Si vous utilisez un répertoire virtuel, assurez-vous de le faire sur le répertoire virtuel et non sur le serveur web Root

4 votes

En plus d'exécuter le pool d'applications en tant qu'identité LocalSystem, j'ai également dû faire correspondre l'identité "NT AUTHORITY" à l'identité de l'utilisateur. \SYSTEM "Rôles des utilisateurs dans les bases de données

38voto

DevT Points 1369

J'ai résolu ce problème en utilisant sql comme l'image suivante.

Cliquez à droite sur db-> propriétés -> permission -> permission View Server -> et ensuite sélectionnez IIS APPPOOL\ASP.NET v4.0 et accorder la permission.

db

0 votes

Le processus (et l'image) que vous décrivez ci-dessus accorde-t-il des autorisations de niveau serveur à l'identité du pool d'applications ? Cela ne semble pas être une bonne idée.

3 votes

Cet utilisateur mérite la médaille ! Rien ne m'a aidé sauf ça !

0 votes

J'ai essayé votre méthode. Et ça marche comme sur des roulettes. Merci.

33voto

JGilmartin Points 1974

Assurez-vous que vous avez...

Trusted_Connection=false;

dans votre chaîne de connexion

9 votes

Le fait d'avoir Trusted_Connection=true dans la chaîne de connexion remplacera les valeurs d'authentification SQL par le profil utilisateur IIS Identity.

2 votes

Dans mon cas, le retrait : Integrated Security=True de la chaîne de connexion a réglé le problème.

0 votes

Ça a marché pour moi. J'ai sauvé la journée @JefftheBear

7voto

Christian Points 1271

Je déteste l'ApplicationPoolIdentity. Je définis toujours un compte utilisateur Windows comme compte sur les AppPools.

Comme le dit la dérive, cela ressemble à un problème de sécurité de la base de données. Créez donc un compte d'utilisateur NT, affectez-le à l'AppPool ASP.NET v4.0 et accordez-lui les droits sur le dossier du site Web et sur la ou les tables concernées dans SQL.

0 votes

Désolé, je n'ai aucune idée de la façon de procéder, pourriez-vous m'indiquer un tutoriel ? Merci pour votre aide.

2 votes

Ne faites pas ça, il y a une raison pour laquelle IIS a changé l'identité du pool d'applications, learn.iis.net/page.aspx/624/application-pool-identities

0 votes

@LeSnip3R lien brisé

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X