用户'IIS APPPOOL \ ASP.NET v4.0'login失败
我有一个Web项目(C#Asp.Net,EF 4,MS SQL 2008和IIS 7),我需要迁移到本地IIS 7(在CASSINI工作正常)。
本地在IIS中我有我的Default Web Site
与我的部署。 我的部署和Default Web Site
都在池ASP.NET 4.0版(查看图像设置)池目标框架4作为我的Web项目。 浏览网站时,浏览器不会显示页面,而是允许浏览器下载页面。
我有本地运行在IIS上的其他项目,他们工作没有问题(但他们不使用entity framework)。
使用事件logging器我看到错误如下:
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)
相关的问题
更新:您可以阅读这个问题的资源,必须手动授予MS SQL 2008权限作为答案中的一个简单的解释。 使用IIS 7.5和MS SQL 2008 R2,不需要手动设置权限。
看起来它试图打开连接到SQL Server失败。
您需要为IIS APPPOOL\ASP.NET v4.0
添加login到SQL Server并授予对数据库的权限。
在SSMS中的服务器下,展开安全性,然后右键单击login并select“新buildlogin…”。
在“新buildlogin”对话框中,input应用程序池作为login名,然后单击“确定”。
然后,您可以右键单击应用程序池的login名,select“属性”并select“用户映射”。 检查适当的数据库和适当的angular色。 我想你可以selectdb_datareader
和db_datawriter
,但是我认为如果你通过EF来执行,你仍然需要授予执行存储过程的权限。 你可以在这里查看angular色的细节。
您可以从IIS7 – >应用程序池 – >高级设置中更改ApplicationPoolIdentity。
在ApplicationPoolIdentity下,您将find本地系统。 这将使您的应用程序在NT AUTHORITY\SYSTEM
下运行,这是默认情况下数据库的现有login。
编辑:在应用此build议之前,您应该注意并理解安全隐患。
确保你有…
Trusted_Connection=false;
在你的连接string中
如果在你指定的连接string中:
User ID=xxx;Password=yyy
但在连接string中有:
Trusted_Connection=true;
SQL Server将使用Windows身份validation,因此您的连接值将被忽略并重写(IIS将使用在Identity用户configuration文件中指定的Windows帐户)。 更多信息在这里
如果在连接string中有相同的情况:
Integrated Security = true;
要么
Integrated Security = SSPI;
因为将使用Windows身份validation连接到数据库服务器。 更多信息在这里
我用下面的图像解决了这个问题。
右键单击db-> properties – > permission – > View Server permission – >,然后selectIIS APPPOOL\ASP.NET v4.0
并授予权限。
我讨厌ApplicationPoolIdentity。 我总是将Windows用户帐户设置为AppPools上的帐户。
正如adrift所说,这听起来像是一个数据库安全问题。 因此,创build一个NT用户帐户,将其分配给ASP.NET v4.0 AppPool,然后将其权限授予网站文件夹和SQL中的相关表。
不要使用集成安全性。 使用User Id=yourUser; pwd=yourPwd;
User Id=yourUser; pwd=yourPwd;
这解决了这个问题。
首先,你需要清除,如果你使用Windows身份validation,你没有提到你的连接string中的任何用户名密码,然后:
当你通过localhost运行代码时会发生什么:当你从localhost运行你的wcftesting客户端时,它将能够与本地debugging模式应用程序通过你的账户服务调用数据库进行通信。 所以它有权访问数据库,因为devenv.exe正在您的用户帐户下运行。
但是当您在IIS中部署您的Web服务时。 现在了解这个服务在IIS下运行,不在你的账户下。 因此,您需要为IIS服务分配访问权限以访问用于Windows身份validation的SQL Server。 在这里,您的Web服务将无法与SQL服务器通信,因为访问权限问题和用户login失败____(这里您的用户将来到)
所以,如果您使用Windows身份validation连接您的数据库,您只需要更改IIS应用程序池设置。 您需要将IIS应用程序池的标识更改为本地系统。
下面是Windows身份validationWCF的步骤:•打开IIS(Windows + R(运行),然后键入inetmgr,然后单击确定)•在连接下双击您的PC名称•单击应用程序池•select您的应用程序池(DefaultAppPool)点击右键进行操作高级设置:•进入过程模型部分,•点击标识。 •现在selectLocalSystem。
现在打开你的SQL Serverpipe理工作室:打开run->然后键入ssms,然后在ssms中按OK,login使用您的Windows身份validation帐户。 打开安全选项卡展开login选项卡,然后您将能够查看您的帐户。
现在打开您帐户的属性到userMapping,然后select您要连接的数据库,然后选中您要用于所选数据库的angular色成员资格服务,单击确定。 (对于networking服务,即内联网用户,您也需要为NT AUTHORITY \ SYSTEM用户configuration以上设置)
添加Trusted_Connection = True; 您的连接string中的属性。 保存并部署Web服务。 重新启动应用程序池。
你现在可以连接数据库了。
运行这个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
我有这个问题,它实际上是由不同的东西造成的 – 我有我的数据库中的'IIS APPPOOL \ ASP.NET v4.0'用户,但它仍然无法正常工作。
我最近升级了我的SQL Server安装,在这个过程中,用户已经与login连接断开 – 所以在数据库 – >安全 – >用户下有一个'IIS APPPOOL \ ASP.NET v4.0'但是没有用户不在安全 – >login。
添加login“IIS APPPOOL \ ASP.NET v4.0”安全 – >login,SQL Server自动将其映射到数据库中的用户(这以前必须手动完成),并解决问题。
我有这个消息,我在Web服务器上使用Windows身份validation。
我希望当前通过身份validation的Web用户对数据库进行身份validation,而不是使用App Pool中指定的IIS APPPOOL \ ASP.NET v4用户。
我发现通过在web.config中input以下内容为我解决了这个问题:
<system.web> <identity impersonate="true" /> </system.web>
https://msdn.microsoft.com/en-us/library/bsz5788z.aspx
我看到其他答案有关在SQL数据库中创buildAppPool用户名或只是使用SQL身份validation。 如果您不想在SQL内部捕获或保护个别Windows用户,则两者都是正确的。
汤姆
设置身份只会使这个工作在我的网页上。
当您启动Visual Studio应用程序时,Cassini将以您自己的用户身份运行您的网站。 IIS将您的网站作为应用程序池标识运行。 除非应用程序池标识被授予对数据库的访问权限,否则会出现错误。
IIS引入了App Pool Identity来提高安全性。 您可以在默认的应用程序池标识下运行网站,或者使用自己的名称创build新的应用程序池,或者使用自己的名称在用户帐户(通常是域帐户)下创build新的应用程序池。
在联网的情况下(不在Azure中),您可以在Active Directory域用户帐户下运行新的App Pool; 我更喜欢通过机器帐户。 这样做可以提供细粒度的安全性和细化的访问networking资源,包括数据库。 每个网站运行在不同的应用程序池(以及其中的每个运行在其自己的域用户帐户下)。
继续在所有连接string中使用Windows集成安全性。 在SQL Server中,将域用户添加为login名,并根据每个网站将权限授予数据库,表,SP等。 例如,Website1使用的DB1具有User1的login名,因为Website1作为User1在App Pool上运行。
从Visual Studio内置数据库(如LocalDB)和内置Web服务器部署到生产环境的一个挑战来自开发人员的用户SID及其ACL不能在安全生产环境中使用。 Microsoft提供了部署工具。 但是,可怜的开发人员却习惯于使用localDB和localWebServer这个简单的VS IDE,因为这些工具对于那些开发者来说很难使用,特别是对于那些缺乏SysAdmin和DBAdmin支持的开发者,他们的专业知识。 尽pipe如此,部署到Azure比上面提到的企业networking情况要容易一些。
如果在web.config中添加了连接string,请确保“Integrated Security = false;” 所以它会使用web.config中指定的id和密码。
<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>
正如所指出的, 不要使用Windows身份validation,使用SQL Server身份validation
另外,如果使用“服务器连接”对话框创build连接,请确保检查web.config中的连接。 您可能创build/修改了连接,并将其作为受信任的连接存储在web.config中。 只需使用此身份validation
<add name="MyDBConnectionString" connectionString="Data Source=localhost;Initial Catalog=Finantial;User ID=xxx;Password=xxx" providerName="System.Data.SqlClient"/>
应该修复错误。
去iis – >应用程序池 – >在应用程序中find你的应用程序池
select您的应用程序池用于应用程序右键单击select高级设置
select应用程序池标识
select内置为本地系统,然后单击确定
你有没有做过@Teddy
推荐的东西,你仍然得到同样的错误?
确保您正在更改与您的虚拟目录相对应的应用程序池的设置,而不是与父服务器相对应的设置。 每个虚拟目录都有自己的AppPool,不会inheritance。
在DefaultAppPool中在Identity属性和Sql Server中设置NetworkService添加用户networking服务,并赋予它适当的权限到您的数据库,这对我来说很好,我已经在本地进行了testing,但我认为这是从任何连接的最佳configurationnetworking中的其他计算机。 当你在IIS中的身份设置LocalSystem的工作正常,并没有必要在Sql Server中创build任何其他用户,但我认为这不会在networking环境中工作。
我碰到了testingASP.NET Web API的相同问题
在Visual Studio 2013 Express中开发Web.Host在SQL Server 2012 Express中创build的数据库使用内置IIS Express执行testing(工作)修改为使用IIS本地(从属性页 – web选项)使用Fiddler进行testing收到错误 – 无法打开数据库为提供者….援引'APPPOOL \ DefaultAppPool'
解决scheme,工作。
在IIS中
点击应用程序池“DefaultAppPool”Set Identify ='ApplicationPoolIdentity'Set .NET framework = v4.0(即使我的应用程序是4.5)
在SQL Server Management Studio中
右键单击安全文件夹(SQL Server引擎下适用于所有表)右键单击用户并添加'IIS APPPOOL \ DefaultAppPool'在'授权'列上的安全检查您想要给的选项。 关于上述如果你是DBA,你可能知道并想要控制这些选项。 如果你像我一样,开发人员只是想testing你的WEB API服务,而这恰好也是通过MVC风格的EF 6访问SQL Server的,那么只需要检查一切。 :)是的,我知道,但它的工作。
如果你添加一个新的login,请确保在服务器属性(右键 – >属性)/安全,身份validation模式设置为sqlserver和Windows不仅窗口。
在安全下添加“每个人”。 如果您添加了服务器和login到数据库的用户,那么这是缺less的东西。 希望这可以帮助。
为了logging,如果在从LocalDB
切换到SQLEXPRESS
后遇到此错误,请确保数据库已存在于SQLEXPRESS
。 您可以在Management Studio中validation这一点。
SQLEXPRESS from LocalDB
切换到SQLEXPRESS from LocalDB
后,使用Entity Framework
时遇到同样的问题。 我不得不运行Update-Database
命令。 之后,我能够成功连接。
为用户IIS APPPOOL\ASP.NET v4.0
授予数据库权限的另一种方法如下。
- 将具有用户名和login名的新用户添加为具有默认架构的
IIS APPPOOL\ASP.NET v4.0
。 - 转到所有者模式和成员身份,检查db_datareader,db_datawriter
在IIS中托pipe应用程序时,我遇到了类似的问题
解
我改变了游泳池的身份和它的工作
ApplicationPoolIdentity -> NetworkService
我完全按照@JeffOgata的说法,但我得到了错误:
Windows NT user or group 'IIS APPPOOL\ASP.NET v4.0' not found. Check the name again. (Microsoft SQL Server, Error: 15401)
我再次查看了我的错误消息,并说Login failed for user 'IIS APPPOOL\DefaultAppPool'.
添加名为IIS APPPOOL\DefaultAppPool
的用户后,一切正常。
- Visual Studio ASP.Net MVC撤消设置为起始页面操作
- 从物理path获取相对的虚拟path
- IIS Express在停止Web应用程序后立即closures正在运行的站点
- 多个应用程序使用相同的login数据库相互logging
- 传递到字典中的模型项目types为“mvc.Models.ModelA”,但是此字典需要“mvc.Models.ModelB”types的模型项目
- ASP.NET 5,.NET Core和ASP.NET Core 5有什么区别?
- 彗星实施ASP.NET?
- 截断查询string&返回干净的URL C#ASP.net
- 在.NET应用程序中的不稳定无效的Viewstate问题