ASP.NET应用程序即使使用" Everyone"也无法访问网络共享。获准访问

时间:2014-03-14 19:02:11

标签: asp.net windows file iis ntfs

我有两台服务器:服务器A是在IIS上运行ASP.NET应用程序的Web服务器,服务器B是SSIS服务器,网络共享包含配置文件。

我需要服务器A能够写入服务器B上的配置文件。这看起来相当简单,但我不断收到错误:"访问路径\\ ServerB \ files \ config。 xml被拒绝。"我为测试所做的工作,使其非常清晰:

  • 我已经设置了" 每个人"完全控制文件夹。
  • 我已经设置了" 每个人"在分享上拥有读/写权限。
  • 我已经设置了" 每个人"完全控制文件。
  • 我已验证该文件不是只读文件。

我意识到这不是一个很好的解决方案,我只是为调试做这个,所以请不要评论告诉我不要这样做。

无论如何,即使设置了这些东西,我仍然会得到#34;访问被拒绝。"我还明确授权了许多用户,包括网络服务 IUSR 匿名登录 IUSRS 组,并没有解决问题。

服务器A上的应用程序池使用 ApplictionPoolIdentity 。我有谷歌搜索和溢出,并找到建议给IIS AppPool \ {应用程序池}或{机器} \ ASPNET等权限,但我无法从服务器B访问这些资源,所以我不明白这是如何做到的。

最后,令人困惑的是,在本地计算机上运行解决方案的开发人员能够访问该文件。所以它与服务器A的配置方式有关,但我无法弄清楚是什么。

编辑:真正古怪的东西在这里发生。我已经想出如何启用审计并获取在服务器B上的事件查看器中记录的请求。当开发人员从本地运行该过程时,我可以看到在服务器B上记录的所有请求。例如:"网络检查共享对象以查看是否可以向客户端授予所需的访问权限。"

然而!尝试从服务器A连接时,没有被记录。什么都没有。服务器A抛出对该路径的访问被拒绝"错误,但我甚至没有看到来自服务器B的请求:(

5 个答案:

答案 0 :(得分:2)

很久以前,但也许对某人有用。

尝试使用类NetworkConnection访问共享文件夹。您需要指定路径和凭据。

此处有关该课程的更多参考资料:

https://gist.github.com/AlanBarber/92db36339a129b94b7dd#file-networkconnection-cs-L15

答案 1 :(得分:1)

您似乎正在使用所有本地身份,我认为即使您提供了哪些权限,它也无法在网络共享上运行。您需要创建一个域用户并与该用户一起运行应用程序池,您应该很高兴。

另外,请确认路径是否可访问或拒绝访问。有时我们会获得拒绝访问的消息,即使路径无法访问。

答案 2 :(得分:0)

您必须根据本文http://blogs.msdn.com/b/vijaysk/archive/2009/02/13/goodbye-network-service.aspx修改ApplicationPoolIdentity,因为它适用于NetworkService标识

答案 3 :(得分:0)

您可能需要在托管共享的计算机上编辑组策略编辑器中的设置。

通过开始→运行→gpedit.msc打开组策略编辑器。在本地计算机策略→计算机配置→Windows设置→安全设置→本地策略→安全选项:

下设置以下内容
  • Network access: Shares that can be accessed anonymously - 在文本字段中输入网络共享文件夹的名称(上面问题中的files)。 (不要包含主机名。)
  • Network access: Let Everyone permissions apply to anonymous users - 设置为Enabled。 (对我来说,这对于授予写入权限是必要的。)

在gpedit.msc中进行更改后,从管理员提升的命令提示符运行gpupdate /force以应用组策略更改。

显然,在进行这些更改之前,您应该考虑特定情况下的安全隐患。

答案 4 :(得分:-1)

system.web下的identity代码下,设置impersonate=true还设置生产服务器的用户名密码