Échec de connexion pour l'utilisateur ' IIS APPPOOLASP.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 (à l'heure actuelle fonctionne très bien avec CASSINI).

sur place, J'ai mon Default Web Site avec mon déploiement. Mon deploy et Default Web Site sont tous les deux sur pool ASP.NET v4.0 (regarder l'image pour les paramètres) le cadre cible pool 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 le la page à la place.

j'ai d'autres projets qui fonctionnent sur IIS localement et ils fonctionnent sans problème (mais ils n'utilisent pas le cadre de L'entité).

en utilisant L'enregistreur 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 APPPOOLASP.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 autorisations doivent être accordées sur MS SQL 2008 manuellement comme arift l'explique dans sa réponse. À l'aide de IIS 7.5 et MS SQL 2008 R2, réglage manuel de permission ne devrait pas être nécessaire.

371
demandé sur Community 2011-10-08 20:43:43

29 réponses

ressemble à un échec en essayant d'ouvrir une connexion au serveur SQL.

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

dans SSMS, sous le serveur, étendre la sécurité, puis clic droit Logins et sélectionnez "nouvelle connexion...".

dans la nouvelle fenêtre de connexion, entrez le nom de connexion dans le pool d'applications et cliquez sur"OK".

enter image description here

vous pouvez ensuite cliquer avec le bouton droit de la souris sur le login de l'application, sélectionner Propriétés et sélectionner"User Mapping". Vérifier la base de données appropriée, et les rôles appropriés. Je pense que vous pourriez juste sélectionner db_datareader et db_datawriter , mais je pense que vous auriez tout de même besoin d'accorder des permissions pour exécuter des procédures stockées si vous faites cela par L'intermédiaire de EF. Vous pouvez vérifier les détails pour les rôles ici .

501
répondu Jeff Ogata 2011-10-08 17:11:44

vous pouvez changer L'ApplicationPoolIdentity de IIS7 -> Pools D'Application -> Paramètres avancés. AdvancedSettings

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

modifier: avant d'appliquer cette suggestion, vous devez noter et comprendre les implications de sécurité.

324
répondu Thea 2014-02-13 13:37:40

assurez-vous que vous avez...

Trusted_Connection=false;

dans votre chaîne de connexion

22
répondu JGilmartin 2012-04-16 19:17:10

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

clic Droit sur db-> propriétés -> permission -> Voir Serveur d'autorisation -> puis sélectionnez IIS APPPOOL\ASP.NET v4.0 et accorder la permission.

db

14
répondu DevT 2013-12-24 18:10:17

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

User ID=xxx;Password=yyy

mais dans la chaîne de connexion il y a:

Trusted_Connection=true;

SQL Server utilisera L'authentification Windows, de sorte que vos valeurs de connexion seront ignorées et supplantées (IIS utilisera le compte Windows spécifié dans le profil D'utilisateur D'identité). plus d'informations ici

il en est de même si dans la chaîne de connexion Il ya:

 Integrated Security = true;

ou

 Integrated Security = SSPI;

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

8
répondu spiderman77 2017-05-23 12:18:22

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
8
répondu Rolwin C 2017-10-19 09:06:35

je déteste L'Identitépolaire. J'ai toujours défini un compte D'utilisateur Windows comme le compte sur AppPools.

comme dit adrift, ça ressemble à un problème de sécurité de base de données. Créez donc un compte D'utilisateur NT, assignez - le au ASP.NET v4.0 AppPool et ensuite lui accorder l'autorisation sur le dossier du site web et à la table(s) pertinente (s) en SQL.

7
répondu Christian 2011-10-08 16:55:27

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

Cela résout le problème.

6
répondu bonh 2015-05-26 15:00:26

première chose que vous devez effacer si vous utilisez l'authentification windows et que vous ne mentionnez pas de mot de passe de nom d'utilisateur dans votre chaîne de connexion alors:

que se passe-t-il lorsque vous exécutez votre code via localhost: lorsque vous exécutez votre client test wcf depuis localhost, il sera en mesure de communiquer avec la base de données car l'application locale en mode de débogage appelle la base de données par le service de votre compte. Donc il a accès à la base de données parce que devenv.exe s'exécute sous votre utilisateur compte.

mais quand vous déployez votre service web dans IIS. Maintenant, comprenez que ce service fonctionne sous IIS pas 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. Ici, votre service web ne serait pas en mesure de communiquer avec le serveur SQL à cause de la question des droits d'accès et L'ouverture de session a échoué pour l'utilisateur_______ (ici votre utilisateur viendra)

Donc, si vous utilisez l'authentification windows pour vous connecter votre base de données, vous avez juste à changer les paramètres de la piscine D'Application IIS. Vous devez changer l'identité de la piscine D'Application D'IIS en système local.

ci-dessous sont les étapes pour l'authentification windows WCF: •ouvrez IIS (windows+R (run) puis tapez inetmgr, puis cliquez sur ok) •double-cliquez votre nom de PC sous Connexions •cliquez sur Application Pools •Select your app pool (DefaultAppPool) •puis sous actions sur le clic droit Paramètres avancés: •allez à la section de modèle de processus et •cliquez sur Identité. •Maintenant, sélectionnez le système local.

ouvrez maintenant votre studio de gestion de serveur sql: open run - > puis tapez ssms puis appuyez sur ok dans ssms, connectez-vous en utilisant votre compte d'authentification windows. ouvrez l'onglet sécurité élargir l'onglet connexions, puis vous serez en mesure d'afficher votre compte.

ouvrez maintenant les propriétés de votre compte allez à userMapping puis sélectionnez la base de données que vous souhaitez connecter Ensuite, vérifiez les services d'adhésion de rôle que vous voulez utiliser pour la base de données sélectionnée cliquez sur ok. (Pour les services de réseau, c'est-à-dire les utilisateurs de l'intranet, vous devez configurer les paramètres ci-dessus pour NT AUTHORITY\SYSTEM user too)

ajouter Trusted_Connection=True; propriété dans votre chaîne de connexion. Enregistrer et déployer le service web. Redémarrez le pool d'applications.

vous serez en mesure de connecter la base de données maintenant.

5
répondu amar gadekar 2015-12-10 06:45:05

aller à iis -> pools d'applications -> trouvez votre pool d'applications utilisés dans l'application

enter image description here

sélectionnez votre pool d'Applications Utilisé pour l'application Clic droit sélectionnez Paramètres avancés

enter image description here

sélectionner l'identité du bassin d'application enter image description here

sélectionnez construit en tant que Système Local et cliquez sur ok

5
répondu Lijo 2017-10-21 11:49:17

j'ai eu ce problème et il a été en fait causé par quelque chose de différent - j'ai eu le 'IIS APPPOOL\ASP.NET v4.0 ' utilisateur dans ma base de données mais ça ne marchait toujours pas.

j'avais récemment mis à jour mon installation de serveur SQL et dans le processus L'utilisateur était devenu 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 pas D'utilisateur non sous Sécurité -> Logins.

a ajouté le Login ' IIS APPPOOL\ASP.NET v4.0' to Security - > Logins, SQL Server a automatiquement mappé L'utilisateur dans la base de données (cela devait être fait manuellement) et le problème a été corrigé.

4
répondu The Coder 2012-03-29 19:57:08

j'ai eu 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'IIS APPPOOL\ASP.NET V4 utilisateur spécifié dans L'Application Pool.

j'ai trouvé en entrant ce qui suit dans le web.config a fixé ceci pour moi:

<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 juste pour utiliser SQL Auth. Les deux seraient corrects si vous ne vouliez pas capturer ou sécuriser les utilisateurs individuels de Windows à L'intérieur de SQL.

Tom

4
répondu tommylux 2017-04-19 15:02:49

comme indiqué, ne pas utiliser L'authentification Windows, utiliser L'authentification SQL Server

aussi si vous avez créé une connexion en utilisant la boîte de dialogue" Server Connection", assurez-vous de vérifier les connexions sur le web.config. Il est probable que vous avez créé/modifié la connexion et qu'elle a été stockée en tant que connexion fiable dans le web.config. Il suffit d'utiliser cette authentification

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

qui devrait corriger l'erreur.

3
répondu Hammad Khan 2016-08-01 05:21:05

définir l'identité fait seulement ce travail dans mes pages.

2
répondu charles 2012-05-30 15:31:35

Cassini gère votre site Web comme votre propre identité d'utilisateur lorsque vous démarrez L'application Visual Studio. L'IIS gère votre site Web comme une identité de Pool D'applications. À moins que L'accès à la base de données ne soit accordé à L'App Pool Identity, vous obtenez des erreurs.

IIS introduit App Pool Identity pour améliorer la sécurité. Vous pouvez lancer des sites web sous L'identité par défaut de L'Application Pool, ou créer une nouvelle Application Pool avec son propre nom, ou créer une nouvelle Application Pool avec son propre nom qui s'exécute sous un utilisateur Compte (habituellement compte de domaine).

dans les situations de réseau (qui ne sont pas en Azure), vous pouvez faire tourner un nouveau Pool D'applications sous un compte D'utilisateur du domaine Active Directory; je préfère cela au compte machine. Cela donne une sécurité granulaire et un accès granulaire aux ressources du réseau, y compris les bases de données. Chaque site Web fonctionne sur un Pool D'applications différent (et chacun d'eux fonctionne sous son propre compte D'utilisateur de domaine).

continuer à utiliser Windows Sécurité Intégrée dans toutes les chaînes de connexion. Dans SQL Server, ajoutez les utilisateurs du domaine comme logins et accordez des permissions aux bases de données, tables, SP, etc. sur un site web de base. Par exemple: DB1 utilisé par Website1 a un login pour User1 parce que Website1 fonctionne sur un Pool D'applications comme User1.

l'un des défis liés au déploiement à partir de la base de données intégrée de Visual Studio (par exemple LocalDB) et du serveur web intégré à un environnement de production découle du fait que l'utilisateur SID du développeur et ses ACLs ne doivent pas être utilisés dans un environnement sécurisé. environnement de production. Microsoft fournit des outils pour le déploiement. Mais dommage le pauvre développeur qui est habitué à tout juste travailler hors de la boîte dans le nouveau VS IDE facile avec localDB et localWebServer, parce que ces outils seront difficiles à utiliser pour ce développeur, en particulier pour un tel développeur qui manque de soutien SysAdmin et 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
répondu subsci 2013-09-16 19:36:41

si vous avez votre chaîne de connexion ajoutée dans votre web.config, assurez-vous que "Integrated Security=false;" ainsi il utiliserait l'id et le mot de passe spécifiés dans le 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
répondu Daming Fu 2015-07-28 05:59:32

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. Ajouter un nouvel utilisateur avec le nom D'Utilisateur et le nom de connexion comme IIS APPPOOL\ASP.NET v4.0 avec votre schéma par défaut.
  2. allez au schéma propriétaire et à L'adhésion, Vérifiez db_datareader, db_datawriter
1
répondu shana 2017-05-13 06:08:14

avez-vous fait ce que @Teddy recommandé et vous encore obtenir la même erreur?

assurez-vous que vous changez les paramètres pour le pool d'applications qui correspond à votre répertoire virtuel et non au serveur parent. Chaque répertoire virtuel a son propre AppPool et n'hérite pas.

0
répondu Simon_Weaver 2013-06-25 05:58:26

dans DefaultAppPool set NetworkService dans la propriété Identity et dans Sql Server ajouter Service réseau Utilisateur et lui donner les permissions appropriées à votre base de données, c'est très bien pour moi, j'ai testé localement, mais je pense que c'est la meilleure configuration pour se connecter à partir de tout autre ordinateur dans le réseau. quand 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 réseau environnement.

0
répondu Luis 2014-02-16 05:46:26

j'ai rencontré le même problème ASP.NET API Web

Développé Web.Hôte dans le studio visuel 2013 Express Base de données créée dans SQL Server 2012 Express Test exécuté à l'aide de l'IIS Express) Modifié pour utiliser IIS Local (à partir de la page de propriétés-option web ) ) A couru à tester avec un violon Erreur reçue-impossible d'Ouvrir La base de données pour le fournisseur.... citant "APPPOOL\DefaultAppPool "

Solution qui a fonctionné.

In IIS

cliquez sur Application pool 'DefaultAppPool' Set Identify = "ApplicationPoolIdentity" Set .net framework = v4.0 (même si mon application était 4.5)

in SQL Server Management Studio

clic droit sur le dossier de sécurité (sous le moteur de serveur SQL s'applique donc à toutes les tables) Clic droit sur L'Utilisateur et ajouter "IIS APPPOOL\DefaultAppPool" Dans securables sur la colonne 'Grant', cochez les options que vous voulez donner. Sur ce qui précède, si vous êtes un DBA que vous connaissez probablement et que vous voulez contrôler quelles sont ces options? Si vous êtes comme moi, un développeur voulais juste tester votre service D'API WEB qui accède également à SQL Server par L'intermédiaire de L'EF 6 dans le style MVC puis cochez tout. :) Oui, je sais, mais cela a fonctionné.

0
répondu Brian Quinn 2014-07-08 00:55:43

dans le cas où vous ajoutez une nouvelle connexion, assurez-vous que sous Propriétés du serveur ( rightclick - > propriétés)/sécurité, le mode d'authentification est défini à la fois sqlserver et windows et pas seulement windows.

0
répondu badr slaoui 2015-09-21 13:26:22

ajouter "tout le monde" sous Sécurité. Si vous avez ajouté le serveur et les utilisateurs se connectant à la base de données, alors c'est quelque chose que vous manquez. Espérons que cette aide.

0
répondu avinava basu 2015-11-26 15:57:37

pour l'enregistrement, si vous rencontrez cette erreur après avoir passé de LocalDB à SQLEXPRESS , assurez-vous que la base de données est déjà SQLEXPRESS . Vous pouvez le vérifier dans Management Studio.

j'ai eu le même problème lorsque j'ai utilisé Entity Framework après être passé à SQLEXPRESS from LocalDB . J'ai dû lancer la commande Update-Database . J'ai été en mesure de se connecter avec succès par la suite.

0
répondu Irshu 2016-02-16 16:49:34

j'ai été confronté au même problème alors que l'hôte de l'application dans IIS

Solution

je changer l'Identité du Pool et son travail m'

ApplicationPoolIdentity -> NetworkService
0
répondu Satish Kumar sonker 2017-08-10 04:33:04

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 encore regardé mon message d'erreur et il disait Login failed for user 'IIS APPPOOL\DefaultAppPool'.

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

0
répondu Ogglas 2017-11-01 13:23:27

a pensé que je posterais ceci comme une réponse car il est pertinent à la question et peut y répondre dans certains cas.

ce même message apparaît aussi si la base de données n'existe pas!

assurez-vous que votre chaîne de connexion n'a pas de fautes d'orthographe, qu'elle pointe vers l'instance du bon serveur, etc.

0
répondu colmde 2017-12-18 15:47:04

j'ai utilisé SQL Server Profiler (disponible dans le menu SSMS => Tools) et j'ai vu là (quand 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. Donc j'ai ajouté cet utilisateur à SQL Server, et ça a marché...

0
répondu alexkovelsky 2018-03-16 12:37:33

In Asp.net webform,

cette erreur a été corrigée lors de l'installation asp.net de:

Gestionnaire de Serveur > Gérer > Ajouter le Rôle et la Fonction > Rôles de Serveur > Serveur Web (IIS) > Serveur Web > Développement d'Applications > ASP.NET 3.5/4.6 est installé.

mon problème est résolu.

0
répondu Zolfaghari 2018-06-18 05:47:02

vous pouvez faire face à cette erreur dans la base de données spécifique qui est créée après la mise à jour SSMS. Ouvrez SSMS et sélectionnez vos bases de données et ouvrez votre base de données requise, puis cliquez sur Sécurité--> Utilisateurs--> et cliquez sur le bouton droit de la souris sur Utilisateurs et cliquez de nouveau sur "Nouvel utilisateur" et ajoutez "Autorité NT\utilisateurs authentifiés et enregistrez-vous et allez à votre formulaire sur le Web/Bureau quoi que vous fassiez. Profiter....

0
répondu Atta Ur Rehman Zai 2018-09-16 10:15:39