IIS appool \ASP登录失败净v4.0 # 39;

我有一个网络项目(c# Asp。Net, EF 4, MS SQL 2008和IIS 7),我需要将其迁移到IIS 7本地(目前与CASSINI工作良好)。

在IIS本地,我有我的Default Web Site和我的deploy。我的deploy和Default Web Site都在ASP池上。NET v4.0(查看图像设置)池目标框架4作为我的web项目。 Pool Settings

.访问站点时,浏览器不会显示页面,而是允许浏览器下载页面

我有其他项目在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)

相关问题 .

< p >更新: 你可以阅读关于这个问题的资源,在MS SQL 2008上必须手动授予权限,arift在他的回答中解释了这一点。 使用IIS 7.5和MS SQL 2008 R2,设置手动权限应该是不必要的
485970 次浏览

看起来它是失败的尝试打开一个连接到SQL Server。

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

在SSMS中,在服务器下展开Security,然后右键单击Logins并选择“New Login…”。

在New Login对话框中,输入应用程序池作为登录名,然后单击“OK”。

enter image description here

然后你可以右键单击应用程序池的登录名,选择属性并选择“用户映射”。检查适当的数据库和适当的角色。我认为你可以只选择db_datareaderdb_datawriter,但我认为如果你通过EF这样做,你仍然需要授予执行存储过程的权限。你可以查看角色在这里的详细信息。

我讨厌ApplicationPoolIdentity。我总是在AppPools上设置一个Windows用户帐户。

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

您可以从IIS7 -> Application Pools -> Advanced Settings修改ApplicationPoolIdentity。 AdvancedSettings

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

编辑:在应用此建议之前,您应该注意并理解安全影响。

我有这个问题,它实际上是由不同的东西引起的-我有'IIS appool \ASP。NET v4.0'用户在我的数据库中,但它仍然不能工作。

我最近升级了我的SQL Server安装,在这个过程中,用户已经从登录断开了-所以有一个'IIS appool \ASP。NET v4.0'在数据库->安全->用户但没有用户不在安全下->登录。

新增“登录IIS appool \ASP. exe”NET v4.0'到安全->登录,SQL Server自动映射到数据库中的用户(这过去必须手动完成)和问题修复。

确保你有…

Trusted_Connection=false;

在你的连接中

设置标识只在我的页面中起作用。

你是否做了@Teddy建议的事情,并且你仍然得到了同样的错误?

请确保您正在更改对应于虚拟目录而不是父服务器的应用程序池的设置。每个虚拟目录都有自己的appool,并且不会继承。

当您启动Visual Studio应用程序时,Cassini以您自己的用户身份运行您的网站。IIS以应用程序池身份运行您的网站。除非应用程序池身份被授予对数据库的访问权,否则会得到错误。

IIS引入了应用程序池标识来提高安全性。你可以在默认的应用程序池身份下运行网站,或者创建一个有自己名字的新应用程序池,或者创建一个有自己名字的新应用程序池,在用户帐户(通常是域帐户)下运行。

在网络环境下(不是在Azure中),你可以让一个新的应用程序池在Active Directory域用户帐户下运行;比起机器账户,我更喜欢这个账户。这样做可以提供细粒度的安全性和对网络资源(包括数据库)的细粒度访问。每个网站都运行在不同的应用程序池上(每个应用程序池都在自己的域用户帐户下运行)。

继续在所有连接字符串中使用Windows集成安全性。在SQL Server中,添加域用户作为登录,并在每个网站的基础上授予数据库,表,SP等权限。例如,Website1使用的DB1有User1的登录,因为Website1以User1的身份运行在应用程序池上。

从Visual Studio内置DB(例如LocalDB)和内置Web Server部署到生产环境的一个挑战是,开发人员的用户SID及其acl不能在安全的生产环境中使用。微软提供了部署工具。但是对于那些习惯于使用localDB和localWebServer在新的easy VS IDE中开箱即用的可怜的开发人员来说,他们很遗憾,因为这些工具对于那些开发人员来说很难使用,特别是对于这样一个缺乏SysAdmin和DBAdmin支持或缺乏专业知识的开发人员来说。尽管如此,部署到Azure比上面提到的企业网络情况更容易。

我用sql解决了这个问题,如下图。

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

db

在DefaultAppPool中,在Identity属性中设置NetworkService,在Sql Server中添加用户网络服务,并给它适当的权限到你的数据库,这对我来说很好,我在本地测试过,但我认为这是从网络中任何其他计算机连接的最佳配置。当你在IIS的身份中设置LocalSystem时,工作得很好,不需要在Sql Server中创建任何其他用户,但我认为这在网络环境中是行不通的。

我在测试ASP时遇到了同样的问题。NET Web API

< p > Web开发。主机在Visual Studio 2013 Express 数据库创建于SQL Server 2012 Express 使用内置的IIS Express执行测试(正在工作) 已修改为使用IIS本地(从属性页- web选项) 用提琴手做了测试 收到错误-无法打开提供商....的数据库 引用'APPPOOL\DefaultAppPool'

有效的解决方案。

在IIS

点击应用程序池'DefaultAppPool' 设置标识= 'ApplicationPoolIdentity' 设置。net framework = v4.0(即使我的应用程序是4.5)

在SQL Server Management Studio

右键单击Security文件夹(在SQL Server引擎下,因此适用于所有表) 右键单击用户并添加“IIS APPPOOL\DefaultAppPool” 在“Grant”列的可担保资产中,检查您想要给予的选项。 如果你是一个DBA,你可能知道并想要控制上面的内容 这些选项是什么。如果你像我一样只是想测试 您的WEB API服务,恰巧也通过EF 6访问SQL Server 在MVC样式中,然后勾选所有东西。:)是的,我知道,但它有效。

不要使用集成安全。 使用User Id=yourUser; pwd=yourPwd; < / p >

这就解决了问题。

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

User ID=xxx;Password=yyy

但是在连接字符串中有:

Trusted_Connection=true;
SQL Server将使用Windows身份验证,因此您的连接值将被忽略和覆盖(IIS将使用身份用户配置文件中指定的Windows帐户)。 更多信息请点击这里 < / p >

如果连接字符串中有:

 Integrated Security = true;

 Integrated Security = SSPI;

,因为Windows身份验证将用于连接到数据库服务器。 更多信息请点击这里 < / p >

如果你在网页中添加了连接字符串。config,确保“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>

如果您添加了一个新的登录,请确保在服务器属性(右键单击->属性)/security下,身份验证模式被设置为sqlserver和windows,而不仅仅是windows。

运行这个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

添加“所有人”的安全。如果您添加了服务器和登录到数据库的用户,那么这就是您所缺少的内容。

你需要清除的第一件事,如果你使用windows身份验证,你没有提到任何用户名密码在你的连接字符串,然后:

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

但是当您在IIS中部署web服务时。现在请了解此服务在IIS下运行,而不是在您的帐户下运行。因此,您需要为IIS服务分配访问权限,以访问sql server for windows认证。这里您的web服务将无法与SQL服务器通信,因为访问权限问题和用户_______登录失败(这里您的用户将来)

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

下面是windows认证WCF的步骤:

1)打开IIS (windows+R(运行),然后输入inetmgr,然后单击确定)

2)双击你的电脑名称在连接

3)单击“应用程序池”

4)选择你的应用池(DefaultAppPool)

5)然后在右键的操作下,点击高级设置:

6)进入流程模型部分

7)点击“身份”。

8)现在选择LocalSystem。

现在打开你的sql server management studio: 打开运行->,然后输入SSMS ->,然后按确定 在ssms中,使用windows认证帐户登录。 打开安全选项卡展开登录选项卡,然后您将能够查看您的帐户

现在打开你的帐户属性 转到userMapping,然后选择你想连接的数据库 然后勾选要用于选定数据库的角色成员服务。单击ok。< / p >

(对于网络服务,即内网用户,您也需要为NT AUTHORITY\SYSTEM用户配置上述设置)

添加Trusted_Connection = True;属性。省省吧!部署web服务。重启应用程序池。

现在可以连接数据库了。

为了记录,如果你在从LocalDB切换到SQLEXPRESS后遇到这个错误,请确保数据库已经在SQLEXPRESS中存在。您可以在Management Studio中验证这一点。

我在切换到SQLEXPRESS from LocalDB后使用Entity Framework时也遇到了同样的问题。我必须运行Update-Database命令。在那之后,我成功地建立了联系。

正如所指出的,不使用Windows身份验证,使用SQL Server身份验证

另外,如果您使用“服务器连接”对话框创建连接,请确保检查web.config中的连接。很可能您创建/修改的连接被存储为web.config中的受信任连接。只需使用此身份验证

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

这应该可以修复错误。

我收到这条消息,我在web服务器上使用Windows身份验证。

我希望当前已验证的web用户根据数据库进行身份验证,而不是使用IIS APPPOOL\ASP。NET v4应用程序池中指定的用户。

我在网上输入以下内容找到的。配置为我修复了这个问题:

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

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

我看到其他关于在SQL DB中创建AppPool用户名或只是使用SQL Auth的答案。如果您不想在SQL中捕获或保护单个Windows用户,这两种方法都是正确的。

汤姆

为用户IIS APPPOOL\ASP.NET v4.0授予数据库权限的另一种方式如下所示。
enter image description here < / p >


  1. 添加新用户,用户名和登录名为<代码>IIS APPPOOL\ASP。网 V4.0 与您的默认模式
  2. 进入Owner schema and Membership,检查db_datareader, db_datawriter

我在IIS中托管应用程序时也遇到过类似的问题

解决方案

我改变池身份和它的工作我

ApplicationPoolIdentity -> NetworkService

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

enter image description here

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

enter image description here

选择应用程序池标识 enter image description here < / p >

select内置为本地系统 然后点击ok

我完全按照@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的用户之后,一切都正常了。

我想把这个作为答案,因为它与问题有关,在某些情况下可以回答这个问题。

同样的消息也出现在如果数据库不存在!

确保连接字符串没有拼写错误,指向正确的服务器实例,等等。

我使用SQL Server分析器(在SSMS =>工具菜单中可用),并在那里看到(当IIS试图连接到数据库时),我的IIS用户由于某种原因是NT AUTHORITY\IUSR,无论在回答这个问题时建议的所有步骤。所以我把这个用户添加到SQL Server,它工作了…

在Asp.net webform中,

此错误在安装asp.net时修复:

服务器管理>管理>添加角色和特性>服务器角色> Web服务器(IIS) > Web服务器>应用程序开发> ASP。已安装NET 3.5/4.6。

我的问题解决了。

在SSMS更新后创建的特定数据库中可能会遇到这个错误。打开SSMS,选择你的数据库,打开你需要的数据库,然后单击安全—>用户—>右键单击“用户”,再次单击“新用户”,添加'NT AUTHORITY\Authenticated Users' .,保存你的工作,并进入你的Web/Desktop表单。享受……

我也有同样的问题,我通过将Integrated Security=True更改为false来解决它 现在它工作

重要的是在服务器角色中启用“系统管理员”

类似的事情发生在我身上,对我有用的是改变属性集成安全= True集成安全= false在web中。网站配置

有两个办法可以解决那个问题。首先是进入你的IIS然后点击你的appool, 然后选择积分右键点击它,进入高级设置和改变身份应用程序到本地系统。这将解决您在IIS中的问题

然而,如果你的问题没有解决,那么去web congih只是从连接字符串中删除integrated security =true,只给用户id和密码。

那我希望你的问题能得到解决。

1_in SqlServer Security=>Login=>NT AUTHORITY\SYSTEM=>RightClick=>Property=> usermapping =>Select yourdatabase =>Public& Owner Select=>OK 2_In IIs应用程序池DefaultAppPool=>Advance Setting=>Identity=>LocalSystem=>Ok

.

去iis ->应用程序池->找到应用程序池中使用的应用程序池->单击它,然后在操作面板中单击“高级设置”。找到'Identity'属性并将其更改为localsystem。

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

enter image description here

然后进入新用户属性,检查该用户将访问的数据库(下面用蓝色标记),并选择db_owner。我不得不选择,因为虽然连接正在工作,但如果没有选择,后续的select查询没有访问权限。

enter image description here

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

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

在我的情况下,我已经导入数据库,它没有映射。一旦我检查了新的数据库,它开始工作。 检查未检查的数据库

enter image description here

我在IIS和dotnet核心中遇到了这个错误。 对于任何使用Sql身份验证的人来说,有一个快速的解决方法。json读取这个来禁用Windows身份验证并使用SQL身份验证。 (这是在appsetting中。Json(默认值)或任何你指定的db连接字符串)

"dbContext": "data source=servername;initial catalog=dbname;user id=your_server_username;password=your_server_password;trusted_connection=false;multipleactiveresultsets=true",

欢呼和快乐编码