web-dev-qa-db-fra.com

Échec 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 je dois le migrer vers IIS 7 localement (pour l'instant, cela fonctionne bien avec CASSINI).

Localement dans IIS, j'ai mon Default Web Site avec mon déploiement. Mes deploy et Default Web Site sont tous deux sur le pool ASP.NET v4.0 (recherchez les paramètres dans l'image) le pool cible Framework 4 en tant que mon projet Web .Pool Settings Lors de la visite du site, le navigateur n’affiche pas la page et lui permet de télécharger la page.

J'ai d'autres projets en cours d'exécution sur IIS localement et ils fonctionnent sans problème (mais ils n'utilisent pas Entity Framework).

En utilisant le journal d'é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

UPDATE: Vous pouvez lire dans les ressources de cette question que les autorisations doivent être accordées manuellement sur MS SQL 2008 comme expliqué à la dérive dans sa réponse . Utiliser IIS 7.5 et MS SQL 2008 R2, en définissant manuellement ne devrait pas être nécessaire.

388
GibboK

On dirait qu'il n'essaie pas d'ouvrir une connexion à SQL Server.

Vous devez ajouter une connexion à SQL Server pour IIS APPPOOL\ASP.NET v4.0 et accorder des autorisations à la base de données.

Dans SSMS, sous le serveur, développez Sécurité, puis cliquez avec le bouton droit de la souris sur Connexions et sélectionnez "Nouvelle connexion ...".

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 la connexion au pool d'applications, sélectionner Propriétés, puis "Mappage de l'utilisateur". Vérifiez la base de données appropriée et les rôles appropriés. Je pense que vous pourriez simplement sélectionner db_datareader et db_datawriter, mais je pense que vous auriez toujours besoin d'accorder des autorisations pour exécuter des procédures stockées si vous le faites via EF. Vous pouvez vérifier les détails des rôles ici .

530
Jeff Ogata

Vous pouvez modifier ApplicationPoolIdentity à partir d'IIS7 -> Pools d'applications -> Paramètres avancés. AdvancedSettings

Sous ApplicationPoolIdentity, vous trouverez le système local. Votre application sera exécutée sous NT AUTHORITY\SYSTEM, qui est un identifiant de connexion existant pour la base de données par défaut.

Edit: Avant d'appliquer cette suggestion, vous devez noter et comprendre les implications pour la sécurité.

329
Thea

assurez-vous d'avoir ...

Trusted_Connection=false;

dans votre connexion String

24
JGilmartin

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

Cliquez avec le bouton droit de la souris sur db-> Propriétés -> autorisation -> autorisation Afficher le serveur ->, puis sélectionnez IIS APPPOOL\ASP.NET v4.0 et accordez l'autorisation.

db

16
DevT

Exécuter ce script SQL

IF NOT EXISTS (SELECT name FROM sys.server_principals WHERE name = 'IIS APPPOOL\DefaultAppPool')
BEGIN
    CREATE LOGIN [IIS APPPOOL\DefaultAppPool] 
      FROM WINDOWS WITH DEFAULT_DATABASE=[master], 
      DEFAULT_LANGUAGE=[us_english]
END
GO
CREATE USER [WebDatabaseUser] 
  FOR LOGIN [IIS APPPOOL\DefaultAppPool]
GO
EXEC sp_addrolemember 'db_owner', 'WebDatabaseUser'
GO
13
Rolwin C

Si vous avez spécifié dans la chaîne de connexion :

User ID=xxx;Password=yyy

mais dans la chaîne connection, il y a:

Trusted_Connection=true;

SQL Server utilisera l'authentification Windows, vos valeurs de connexion seront donc ignorées et remplacées (IIS utilisera le compte Windows spécifié dans le profil d'utilisateur Identity) . plus d'informations ici

Il en va de même si dans la chaîne connection, il y a:

 Integrated Security = true;

ou

 Integrated Security = SSPI;

car l'authentification Windows sera utilisée pour se connecter au serveur de base de données . plus d'informations ici

9
spiderman77

Je déteste le ApplicationPoolIdentity. Je définis toujours un compte d'utilisateur Windows en tant que compte sur AppPools.

Comme dit à la dérive, cela ressemble à un problème de sécurité de base de données. Créez donc un compte utilisateur NT, assignez-le à AppPool ASP.NET v4.0, puis accordez-lui l’autorisation sur le dossier du site Web et sur la ou les table (s) correspondante (s) dans SQL.

7
Christian

go to iis -> pools d'applications -> trouvez votre pool d'applications utilisé dans l'application 

 enter image description here

sélectionnez votre pool d'applications utilisé pour l'application cliquez avec le bouton droit de la souris sur sélectionnez paramètres avancés

 enter image description here

Sélectionnez l’identité du pool d’applications  enter image description here

sélectionnez construit en tant que système local et cliquez sur OK 

6
Lijo

N'utilisez pas la sécurité intégrée . Utilisez User Id=yourUser; pwd=yourPwd;

Cela résout le problème.

6
user4203557

La première chose que vous devez effacer si vous utilisez l'authentification Windows et que vous ne mentionnez pas de mot de passe d'utilisateur dans votre chaîne de connexion est la suivante:

Que se passe-t-il lorsque vous exécutez votre code via localhost: lorsque vous exécutez votre client de test wcf à partir de localhost, il pourra communiquer avec la base de données car l'application en mode débogage local appelle la base de données par le service de votre compte. Donc, il a accès à la base de données car devenv.exe est en cours d'exécution sous votre compte utilisateur.

Mais lorsque vous déployez votre service Web dans IIS. Comprenez maintenant que ce service fonctionne sous IIS et non sous votre compte. Vous devez donc attribuer des droits d'accès au service IIS pour accéder au serveur SQL pour l'authentification Windows. Dans ce cas, votre service Web ne pourrait pas communiquer avec le serveur SQL en raison d'un problème de droits d'accès et de l'échec de la connexion pour l'utilisateur_______ (votre utilisateur viendra ici).

Ainsi, si vous utilisez l'authentification Windows pour connecter votre base de données, il vous suffit de modifier les paramètres du pool d'applications IIS. Vous devez modifier l'identité du pool d'applications IIS en système local.

Voici les étapes à suivre pour l’authentification Windows par WCF: • Ouvrez IIS (windows + R (exécution), puis tapez inetmgr, puis cliquez sur ok). • double-cliquez sur le nom de votre ordinateur sous Connexions. • Cliquez sur Pools d’applications. ) • Puis sous actions sur le clic droit Paramètres avancés: • Allez à la section Modèle de processus et • cliquez sur Identité. • Sélectionnez maintenant LocalSystem.

Ouvrez maintenant votre studio de gestion de serveur SQL: ouvrez run-> puis tapez ssms puis appuyez sur ok dans ssms, connectez-vous à l'aide de votre compte d'authentification Windows. Ouvrez l'onglet Sécurité, développez l'onglet Connexions pour pouvoir afficher votre compte.

Ouvrez maintenant les propriétés de votre compte Allez dans userMapping, sélectionnez la base de données que vous souhaitez connecter Puis cochez les services d’appartenance au rôle que vous souhaitez utiliser pour la base de données sélectionnée Cliquez sur ok ..__ (pour les services réseau c'est-à-dire les utilisateurs d'intranet, vous devez également configurer les paramètres ci-dessus pour l'utilisateur NT AUTHORITY\SYSTEM)

add Trusted_Connection = True; propriété dans votre chaîne de connexion. Enregistrez-le et déployez le service Web. Redémarrez le pool d'applications.

vous pourrez maintenant connecter la base de données.

5
amar gadekar

J'ai reçu ce message et j'utilise l'authentification Windows sur le serveur Web.

Je voulais que l'utilisateur Web actuellement authentifié soit authentifié par rapport à la base de données, plutôt que d'utiliser l'utilisateur IIS APPPOOL\ASP.NET v4 spécifié dans le pool d'applications. 

J'ai trouvé en entrant ce qui suit dans le fichier web.config que j'ai corrigé ceci:

<system.web>
  <identity impersonate="true" />
</system.web>

https://msdn.Microsoft.com/en-us/library/bsz5788z.aspx

Je vois d'autres réponses concernant la création du nom d'utilisateur AppPool dans la base de données SQL ou simplement pour utiliser l'authentification SQL. Les deux seraient corrects si vous ne vouliez pas capturer ou sécuriser des utilisateurs Windows individuels dans SQL.

À M

4
tommylux

J'avais ce problème et c'était en fait causé par quelque chose de différent. J'avais l'utilisateur 'IIS APPPOOL\ASP.NET v4.0' dans ma base de données, mais cela ne fonctionnait toujours pas. 

J'ai récemment mis à niveau mon installation SQL Server et, au cours du processus, l'utilisateur s'est déconnecté de la connexion. Il y avait donc un 'IIS APPPOOL\ASP.NET v4.0' sous Base de données -> Sécurité -> Utilisateurs MAIS aucun utilisateur ne se trouvant sous Sécurité -> Connexions.

Ajout de la connexion 'IIS APPPOOL\ASP.NET v4.0' à Sécurité -> Connexions, SQL Server l'a automatiquement mappée à l'utilisateur dans la base de données (cela devait être fait manuellement) et le problème a été résolu.

4
The Coder

Comme indiqué, Ne pas utiliser l'authentification Windows, utiliser l'authentification SQL Server

De même, si vous avez créé une connexion à l'aide de la boîte de dialogue "Connexion au serveur", vérifiez les connexions dans le fichier web.config. Il est probable que vous avez créé/modifié une connexion qui a été stockée en tant que connexion sécurisée dans web.config. Utilisez simplement cette authentification

<add name="MyDBConnectionString" connectionString="Data Source=localhost;Initial Catalog=Finantial;User ID=xxx;Password=xxx" providerName="System.Data.SqlClient"/>

ce qui devrait corriger l'erreur.

3
Hammad Khan

La définition de l’identité ne fait que fonctionner dans mes pages.

2
charles

Si votre chaîne de connexion est ajoutée à votre web.config, assurez-vous que "Integrated Security = false;" il utilisera donc l'id et le mot de passe spécifiés dans le fichier web.config.

<connectionStrings>
    <add providerName="System.Data.SqlClient" name="MyDbContext" connectionString="Data Source=localhost,1433;Initial Catalog=MyDatabase;user id=MyUserName;Password=MyPassword;Trusted_Connection=true;Integrated Security=false;" />
</connectionStrings>
2
Daming Fu

Cassini exécute votre site Web sous votre propre identité d'utilisateur lorsque vous démarrez l'application Visual Studio. IIS exécute votre site Web en tant qu'identité de pool d'applications. Sauf si l'accès à la base de données est accordé à l'identité du pool d'applications, vous obtenez des erreurs. 

IIS a introduit l’identité du pool d’applications pour améliorer la sécurité. Vous pouvez exécuter des sites Web sous l'identité du pool d'applications par défaut, ou créer un nouveau pool d'applications avec son propre nom ou créer un nouveau pool d'applications avec son propre nom exécuté sous un compte d'utilisateur (généralement un compte de domaine). 

Dans les situations de réseau (qui ne sont pas dans Azure), vous pouvez exécuter un nouveau pool d'applications sous un compte d'utilisateur de domaine Active Directory. Je préfère ceci sur le compte d'ordinateur. Cela donne une sécurité granulaire et un accès granulaire aux ressources du réseau, y compris aux bases de données. Chaque site Web s'exécute sur un pool d'applications différent (et chacun de ceux-ci s'exécute sous son propre compte d'utilisateur de domaine). 

Continuez à utiliser Windows Integrated Security dans toutes les chaînes de connexion. Dans SQL Server, ajoutez les utilisateurs du domaine en tant que connexions et accordez des autorisations aux bases de données, tables, SP, etc., site par site. Par exemple. DB1 utilisé par Website1 dispose d'un identifiant pour User1 car Website1 s'exécute sur un pool d'applications en tant qu'utilisateur1. 

Le déploiement du DB Web intégré dans Visual Studio (par exemple, LocalDB) et du serveur Web intégré dans un environnement de production découle du fait que le SID du développeur et ses ACL ne doivent pas être utilisés dans un environnement de production sécurisé. Microsoft fournit des outils de déploiement. Mais pitié du pauvre développeur qui est habitué à tout faire dès le départ dans le nouveau système easy VS IDE avec localDB et localWebServer, car ces outils seront difficiles à utiliser pour ce développeur, en particulier pour un tel développeur dépourvu de SysAdmin. et le support DBAdmin ou leurs connaissances spécialisées. Néanmoins, le déploiement sur Azure est plus facile que la situation de réseau d'entreprise mentionnée ci-dessus. 

2
subsci

Une autre façon d’accorder l’autorisation à la base de données pour l’utilisateur IIS APPPOOL\ASP.NET v4.0 est la suivante. 
 enter image description here


  1. Ajoutez un nouvel utilisateur avec le nom d'utilisateur et le nom de connexion sous la forme IIS APPPOOL\ASP.NET v4.0 avec votre schéma par défaut.
  2. Accédez au schéma de propriétaire et d'adhésion, vérifiez db_datareader, db_datawriter
1
shana

J'ai fait exactement comme @JeffOgata a dit mais j'ai eu l'erreur:

Windows NT user or group 'IIS APPPOOL\ASP.NET v4.0' not found. Check the name again. (Microsoft SQL Server, Error: 15401)

J'ai regardé mon message d'erreur à nouveau et il a dit Login failed for user 'IIS APPPOOL\DefaultAppPool'.

Après avoir ajouté un utilisateur nommé IIS APPPOOL\DefaultAppPool, tout a fonctionné.

0
Ogglas

J'ai utilisé SQL Server Profiler (disponible dans SSMS => menu Outils) et j'ai vu (lorsque IIS a tenté de se connecter à la base de données) que mon utilisateur IIS était pour une raison quelconque NT AUTHORITY\IUSR, peu importe toutes les étapes recommandées dans les réponses à cette question. J'ai donc ajouté cet utilisateur à SQL Server, et cela a fonctionné ...

0
alexkovelsky

J'ai le même problème, je l'ai résolu en remplaçant Integrated Security=True par false Maintenant, il fonctionne

0
subramanya4

Vous pouvez faire face à cette erreur dans une base de données spécifique créée après la mise à jour de SSMS. Ouvrez SSMS et sélectionnez vos bases de données et ouvrez la base de données requise, puis cliquez sur Sécurité -> Utilisateurs ->, cliquez avec le bouton droit de la souris sur Utilisateurs et cliquez à nouveau sur "Nouvel utilisateur" et ajoutez'NT AUTHORITY\Authenticated Users 'et enregistrez votre travail et accédez à votre formulaire sur le Web/Desktop quoi que vous fassiez. Prendre plaisir....

0
Atta Ur Rehman Zai

J'ai rencontré le même problème lors du test de l'API Web ASP.NET 

Développement de Web.Host dans Visual Studio 2013 Express Base de données créée dans SQL Server 2012 Express Test exécuté à l'aide de IIS Express intégré (en fonctionnement) Modifié pour utiliser IIS Local (à partir de page de propriétés - option Web) Test effectué avec Fiddler .__ Erreur reçue - Impossible d'ouvrir la base de données pour le fournisseur .... citant 'APPPOOL\DefaultAppPool' 

Solution qui a fonctionné.

Dans IIS

Cliquez sur le pool d'applications 'DefaultAppPool' Set Identify = 'ApplicationPoolIdentity' Définissez .NET framework = v4.0 (même si mon application était 4.5)

Dans SQL Server Management Studio

Cliquez avec le bouton droit sur le dossier Sécurité (sous le moteur SQL Server s'applique ainsi à toutes les tables) Cliquez avec le bouton droit de la souris sur Utilisateur et ajoutez 'IIS APPPOOL\DefaultAppPool' . Concernant ce qui précède, si vous êtes un administrateur de base de données, vous savez probablement et souhaitez contrôler Quelles sont ces options. Si vous êtes comme moi un développeur qui souhaitait simplement tester Votre service API Web, qui accède également à SQL Server via EF 6in, dans le style MVC, puis cochez tout. :) Oui je sais mais ça a marché.

0
Brian Quinn

Je pensais que je posterais ceci comme une réponse car elle est pertinente à la question et peut y répondre dans certains cas.

Ce même message apparaît également si la base de données n’existe pas!

Assurez-vous que votre chaîne de connexion ne contient pas d'orthographe erronée, qu'elle pointe vers l'instance de serveur appropriée, etc.

0
colmde

Avez-vous fait ce que @Teddy vous a recommandé et vousTOUJOURSobtenez la même erreur?

Assurez-vous de modifier les paramètres du pool d'applications correspondant à votre répertoire virtuel et non au serveur parent. Chaque répertoire virtuel a son propre AppPool et n'hérite pas.

0
Simon_Weaver

Si vous ajoutez un nouvel identifiant, assurez-vous que sous Propriétés du serveur (clic droit -> Propriétés)/sécurité, le mode d'authentification est défini sur sqlserver et Windows non seulement Windows.

0
badr slaoui

Activer important 'sysadmin' dans les rôles de serveur

0
edu

Ajouter "Tout le monde" sous sécurité. Si vous avez ajouté le serveur et que les utilisateurs se connectant à la base de données, il vous manque quelque chose. J'espère que cela t'aides.

0
avinava basu

quelque chose de semblable m'est arrivé. Ce qui a fonctionné pour moi a été de changer la propriété. Sécurité intégrée = True à Sécurité intégrée = false dans le fichier Web.config du site Web.

0
Erik Rodriguez

Dans DefaultAppPool, définissez NetworkService dans la propriété Identity et dans Sql Server, ajoutez le service réseau à l'utilisateur et accordez-lui les autorisations appropriées pour votre base de données. Ce système fonctionne très bien pour moi. autre ordinateur du réseau. Lorsque vous définissez LocalSystem dans l'identité dans IIS, cela fonctionne bien et il n'est pas nécessaire de créer un autre utilisateur dans Sql Server, mais je pense que cela ne fonctionnera pas dans un environnement réseau.

0
Luis

Dans le formulaire Web Asp.net,

cette erreur est corrigée lors de l'installation de asp.net à partir de:

Gestionnaire de serveur> Gérer> Ajouter un rôle et une fonctionnalité> Rôles de serveur> Serveur Web (IIS)> Serveur Web> Développement d'applications> ASP.NET 3.5/4.6 est installé.

mon problème résolu.

0
Zolfaghari

Pour mémoire, si vous rencontrez cette erreur après être passé de LocalDB à SQLEXPRESS, assurez-vous que la base de données existe déjà dans SQLEXPRESS. Vous pouvez le vérifier dans Management Studio.

J'ai eu le même problème lors de l'utilisation de Entity Framework après le passage à SQLEXPRESS from LocalDB. Je devais exécuter la commande Update-Database. J'ai pu me connecter avec succès après cela.

0
Irshu