由于权限不足,无法读取配置文件。

441

最近我在尝试使用IIS托管我的asp.net站点时遇到了一个错误。我找到了一种被许多人推崇的解决方案。

解决方案:

  1. 将IIS_IUSRS添加为具有该文件夹中文件读取权限的用户
  2. 更改IIS身份验证方法为BasicAuthentication
  3. 刷新网站,它会正常工作

(http://vivekthangaswamy.blogspot.com/2009/07/aspnet-website-cannot-read.html)

但是我需要在web.config文件中添加什么呢?我以前从未编辑过。以下是它目前的内容:

<?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
    <connectionStrings>
  <add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True"
   providerName="System.Data.SqlClient" />
 </connectionStrings>
 <system.web>
  <compilation debug="true" strict="false" explicit="true" targetFramework="4.0"/>
    </system.web>
</configuration>

我的错误是:

配置错误:由于权限不足无法读取配置文件
配置文件:\?\C:\Users*****\Documents\Visual Studio2010\WebSites\PointsForTime\web.config


9
请参考安装重写模块。这将为您节省数小时的时间。 - regisbsb
我的解决方案是使用管理员权限打开的命令行运行命令。为此,请找到命令提示符,右键单击它,并单击以管理员身份运行。 - David Waddington
2
除了其他答案之外,还要注意加密文件系统(EFS)也可能会干扰IIS。 - G-Wiz
我已经完成了这个广告,现在本地主机正在要求密码,到目前为止,这是我最接近让它工作的方法,谢谢。 - Paul Ledger
2
对我来说,没有IIS_IUSR, 我对已验证的用户做了同样的操作,它起作用了。 - Bhanu Chhabra
40个回答

6

与其给予所有IIS用户访问权限(如IIS_IUSRS),您也可以通过站点仅给予应用程序池标识访问权限。这是微软推荐的方法,更多信息可以在此处找到:

https://support.microsoft.com/zh-cn/help/4466942/understanding-identities-in-iis

https://learn.microsoft.com/zh-cn/iis/manage/configuring-security/application-pool-identities

解决方案:

enter image description here

首先查看上面的配置文件参数,确定需要访问的位置。在这种情况下,整个publish文件夹需要访问权限。右键单击该文件夹,然后选择属性,再选择“安全”选项卡。

enter image description here

点击 编辑... ,然后点击 添加...

现在查看Internet Information Services(IIS)管理器和应用程序池:

enter image description here

在我的情况下,我的站点在LocalTest应用程序池下运行,然后我输入名称 IIS AppPool\LocalTest

enter image description here

点击 检查名称 ,用户应该能够找到。

enter image description here

给予用户所需的访问权限(默认为:读取和执行、列出文件夹内容和读取),一切都应该正常工作。


我尝试为IIS_IUSRS和“已验证的用户”授予读取权限,但只有在我将其授予我的应用程序应用程序池后才起作用。 - Tolio

4

当我们的IIS应用程序中的虚拟目录使用了包含正斜杠/而不是反斜杠\物理路径时,我们遇到了这个问题。这是在持续交付过程中使用IIS的powershell管理API时不小心发生的。

错误配置示例 - applicationHost.config

<application path="/MySite/MyService" applicationPool="MyAppPool" enabledProtocols="http">
    <virtualDirectory path="/" physicalPath="C:\inetpub\MySite/MyService" />
</application>

请确保physicalPath属性不包含正斜杠/,只包含反斜杠\

已更正的配置示例 - applicationHost.config

<application path="/MySite/MyService" applicationPool="MyAppPool" enabledProtocols="http">
    <virtualDirectory path="/" physicalPath="C:\inetpub\MySite\MyService" />
</application>

1
在我的情况下,物理路径有双反斜杠,例如 C:\inetpub\MySite\\MyService。将其更改为单个反斜杠即可解决问题。 - Ben Anderson

4

我使用 subst 命令将 D: 盘符映射为 C: 盘符,以便与团队中的其他开发人员保持相同的设置。这也导致了我遇到了与描述相同的错误。删除此映射后问题得到了解决。


3
我将为您翻译以下内容:

通过将进程模型标识更改为LocalSystem,我解决了这个问题。如果您右键单击应用程序池,选择“高级设置”,您可以找到此设置。我正在运行IIS 7.5。


3
被接受的解决方案对我没有用。我使用Git存储库,并克隆到以下文件夹。
c:\users\myusername\source\repos\myWebSite

我创建了一个新的IIS网站并将其指向路径。但是,该路径没有接受解决方案中建议的iis_iusrs权限。当我添加了权限后,它仍然无法正常工作。
只有在我将以下权限授予“用户”组并继承级联权限到web.config时,它才开始工作。可能应该仅将其应用于web.config以减少攻击面积。
请参考以下图片设置权限:User Pemissions

有完全相同的情况。这个有帮助。 - Roemer

3
将项目移到除C盘以外的驱动器上: 对于我来说,这种错误就是这么解决的。

3

所有给出的答案在不同情况下都是有效的且可行的。

对我而言,重新启动Visual Studio解决了问题。


2
以上回答很有帮助,但如果有人遇到类似问题,请注意 - 我曾经遇到过这个问题,结果发现我正在共享包含站点的根文件夹(在 Windows 网络中)。我们取消了共享,并添加了用户读取/执行的权限,然后它就可以正常工作了。
我怀疑共享造成了问题。

2
我已经解决了这个问题,方法是为应用程序池用户(WIN SERVER 2008 R2)添加了对以下文件夹的读取权限: C:\Windows\System32\inetsrv\config
背景介绍: 我们的服务器曾被黑客攻击,使用了误操作,在此期间应用程序用户拥有比它所需的更多权限(本地管理员权限)。
为了解决这个问题,我们创建了一个新的域用户,仅在应用程序文件夹上具有最小的必要权限,并将其分配为应用程序池用户。这是我们问题的解决方案。

2

如果您的应用程序在虚拟目录中,并且文件路径是映射驱动器,则可能会发生此情况。

如果您将文件路径更改为本地驱动器,则可以解决此问题,如果确实是您的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接