用户'IIS APPPOOL\ASP.NET v4.0'登录失败

Gib*_*boK 412 c# asp.net iis-7 web-config

我有一个Web项目(C#Asp.Net,EF 4,MS SQL 2008和IIS 7),我需要在本地将它迁移到IIS 7(目前可以正常使用CASSINI).

在IIS的本地我Default Web Site有我的部署.我的部署和Default Web Site在池上的ASP.NET v4.0(查看设置图像)池目标框架4作为我的web项目. 池设置 访问该站点时,浏览器不会显示该页面,而是允许浏览器下载该页面.

我在本地IIS上运行其他项目,它们没有问题(但它们不使用实体框架).

使用事件记录器我看到如下错误:

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)
Run Code Online (Sandbox Code Playgroud)

相关问题

更新:您可以在此问题的资源中读取必须在MS SQL 2008上手动授予权限,如他的答案中的arift解释.使用IIS 7.5和MS SQL 2008 R2,不需要手动设置权限.

Jef*_*ata 569

看起来它没有尝试打开与SQL Server的连接.

您需要为SQL Server添加登录名IIS APPPOOL\ASP.NET v4.0并为数据库授予权限.

在SSMS中,在服务器下,展开"安全性",然后右键单击"登录"并选择"新建登录...".

在"新建登录"对话框中,输入应用程序池作为登录名,然后单击"确定".

在此输入图像描述

然后,您可以右键单击应用程序池的登录名,选择"属性",然后选择"用户映射".检查相应的数据库和相应的角色.我想你可以只选择db_datareaderdb_datawriter,但我觉得你还是需要授予权限,如果你通过EF做到这一点,以执行存储过程.您可以在此处查看角色的详细信息.

  • 非常重要:请勿点击搜索以确认登录!它不会识别它但它会起作用.只需将其输入为IIS APPPOOL\SimonsAppPoolName即可.请参阅http://stackoverflow.com/questions/1933134 (74认同)
  • 谢谢,我做了你伤心的事,现在我收到这个错误:无法打开登录请求的数据库"SiteNameExtension".登录失败.用户'IIS APPPOOL\DefaultAppPool'登录失败. (8认同)
  • 相反,最好将IIS中的"Identity"更改为"LocalSystem",如下一个答案中所述. (6认同)
  • 对我来说,添加的用户是'IIS APPPOOL\DefaultAppPool'.然后它奏效了. (4认同)

The*_*hea 333

您可以从IIS7 - >应用程序池 - >高级设置更改ApplicationPoolIdentity. 高级设置

在ApplicationPoolIdentity下,您将找到本地系统.这将使您的应用程序运行NT AUTHORITY\SYSTEM,默认情况下是数据库的现有登录.

编辑:在应用此建议之前,您应该注意并理解安全隐患.

  • @GibboK,如果您担心安全性,请不要这样做.见http://technet.microsoft.com/en-us/library/dd378907(v=WS.10).aspx (51认同)
  • 这很臭.授予Web应用程序系统权限是灾难的一种方法,并允许不法分子利用各种机会不仅在您的Web应用程序上,而且在整个托管服务器上造成不良.仅仅因为数据库接受来自SYSTEM的登录并不意味着您应该将您的Web应用程序作为SYSTEM运行.Windows桌面甚至不会让你作为SYSTEM运行(没有跳过篮球).使用此权限运行webapp是一个非常*非常愚蠢的想法.您应该让DB接受当前的apppool标识.如果可以的话,我会-100.-1. (31认同)
  • SYSTEM比Administrator更具特权.你应该****运行您的Web服务器与任何接近该级别的东西. (8认同)
  • 除了将应用程序池作为LocalSystem标识运行之外,我还必须将"NT AUTHORITY\SYSTEM"用户映射到数据库角色 (4认同)

JGi*_*tin 28

确保你有......

Trusted_Connection=false;
Run Code Online (Sandbox Code Playgroud)

在您的连接字符串中

  • 连接字符串中的Trusted_Connection = true将使用IIS标识用户配置文件覆盖SQL身份验证值. (7认同)
  • 注意详细说明? (5认同)
  • 在我的情况下删除:Integrated Security = True从连接字符串修复它. (2认同)

Dev*_*evT 23

我使用sql解决了这个问题,如下图所示.

右键单击db-> properties - > permission - > View Server权限 - >,然后选择IIS APPPOOL\ASP.NET v4.0并授予权限.

D b

  • 这个用户值得获得奖牌!除此之外没有任何帮助! (2认同)
  • @ Khateeb321绝对,非常感谢你的回答. (2认同)

Rol*_*n C 17

运行这个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
Run Code Online (Sandbox Code Playgroud)


spi*_*man 10

如果在您指定的连接字符串中:

User ID=xxx;Password=yyy
Run Code Online (Sandbox Code Playgroud)

但在连接字符串中有:

Trusted_Connection=true;
Run Code Online (Sandbox Code Playgroud)

SQL Server将使用Windows身份验证,因此将忽略和覆盖您的连接值(IIS将使用Identity用户配置文件中指定的Windows帐户). 更多信息在这里

如果在连接字符串中存在以下情况,则同样适用:

 Integrated Security = true;
Run Code Online (Sandbox Code Playgroud)

要么

 Integrated Security = SSPI;
Run Code Online (Sandbox Code Playgroud)

因为Windows身份验证将用于连接到数据库服务器. 更多信息在这里


zar*_*zar 10

我必须在 SQL Server 中创建一个用户“IIS APPPOOL\DefaultAppPool”,如下所示。安全 > 登录 > 右键单击​​并按“新登录”。您只需输入屏幕中红色显示的用户名。

在此输入图像描述

然后进入新用户属性,检查该用户将访问的数据库(下面用蓝色标记)并选择db_owner。我必须选择,因为虽然连接正常,但如果未选择此选项,后续的 SELECT 查询将无法访问。

在此输入图像描述

这两个人应该做。基本上,您正在为数据库创建新的用户所有者,以便它具有完全访问权限。

你不需要重新启动 SQL Server 或其他任何东西,应该可以工作。


Lij*_*ijo 9

转到iis - >应用程序池 - >找到应用程序中使用的应用程序池

在此输入图像描述

选择用于应用程序的应用程序池右键单击选择高级设置

在此输入图像描述

选择应用程序池标识 在此输入图像描述

选择内置为本地系统,然后单击确定


Chr*_*ian 7

我讨厌ApplicationPoolIdentity.我总是将Windows用户帐户设置为AppPools上的帐户.

正如adrift所说,它听起来像是一个数据库安全问题.因此,创建一个NT用户帐户,将其分配给ASP.NET v4.0 AppPool,然后将其权限授予网站文件夹和SQL中的相关表.

  • 不要这样做,有一个原因IIS更改了应用程序池标识,http://learn.iis.net/page.aspx/624/application-pool-identities/ (2认同)

小智 7

不要使用集成安全性.使用User Id=yourUser; pwd=yourPwd;

这解决了这个问题.


Ama*_*kar 7

如果您使用的是Windows身份验证,并且未在连接字符串中提及任何用户名密码,则首先需要清除:

通过localhost运行代码时会发生什么:当您从localhost运行wcf测试客户端时,它将能够与本地调试模式应用程序通过您的帐户服务调用数据库进行通信.因此,它可以访问数据库,因为devenv.exe在您的用户帐户下运行.

但是当您在IIS中部署Web服务时.现在了解此服务是在不在您帐户下的IIS下运行的.因此,您需要为IIS服务分配访问权限以访问sql server以进行Windows身份验证.在这里,由于访问权限问题和用户______登录失败,您的Web服务将无法与SQL服务器通信(此处您的用户将来)

因此,如果您使用Windows身份验证连接数据库,则只需更改IIS应用程序池设置即可.您需要将IIS应用程序池的标识更改为本地系统.

以下是Windows身份验证WCF的步骤:•打开IIS(Windows + R(运行),然后键入inetmgr,然后单击"确定")•在"连接"下双击您的PC名称•单击"应用程序池"•选择您的应用程序池(DefaultAppPool)•然后在右键单击"高级设置"上的操作:•转到"流程模型"部分,然后单击"身份".•现在选择LocalSystem.

现在打开你的sql server管理工作室:打开run->然后键入ssms然后在ssms中按ok,使用你的windows身份验证帐户登录.打开安全选项卡展开登录选项卡,然后您就可以查看您的帐户.

现在打开您帐户的属性转到userMapping,然后选择要连接的数据库,然后检查要用于所选数据库的角色成员资格服务,单击确定.(对于网络服务,即Intranet用户,您还需要为NT AUTHORITY\SYSTEM用户配置上述设置)

添加Trusted_Connection = True; 连接字符串中的属性.保存并部署Web服务.重启应用池.

您现在可以连接数据库了.


小智 6

1_in SqlServer Security=>Login=>NT AUTHORITY\SYSTEM=>RightClick=>Property=>UserMaping=>Select YourDatabse=>Public&&Owner Select=>OK 2_In IIs Application Pools DefaultAppPool=>Advance Setting=>Identity=>LocalSystem=>Ok