É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.
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.
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".
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 .
vous pouvez changer L'ApplicationPoolIdentity de IIS7 -> Pools D'Application -> Paramètres avancés.
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é.
assurez-vous que vous avez...
Trusted_Connection=false;
dans votre chaîne de connexion
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.
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
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
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.
N'utilisez pas la sécurité intégrée.
Use User Id=yourUser; pwd=yourPwd;
Cela résout le problème.
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.
aller à iis -> pools d'applications -> trouvez votre pool d'applications utilisés dans l'application
sélectionnez votre pool d'Applications Utilisé pour l'application Clic droit sélectionnez Paramètres avancés
sélectionner l'identité du bassin d'application
sélectionnez construit en tant que Système Local et cliquez sur ok
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é.
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
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.
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.
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>
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.
- 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. - allez au schéma propriétaire et à L'adhésion, Vérifiez db_datareader, db_datawriter
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.
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.
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é.
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.
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.
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.
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
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é.
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.
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é...
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.
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....