【问题标题】:C# 3.5 ASP.net File IO issue, UnauthorizedAccessException to file on network shareC# 3.5 ASP.net 文件 IO 问题,UnauthorizedAccessException 到网络共享文件
【发布时间】:2009-05-05 16:20:18
【问题描述】:

每次我尝试访问(只是读取)网络共享上的文件时都会收到 UnauthorizedAccessException"\\server\folder1\folder2\file.pdf."

我正在模拟对上述文件夹具有读写权限的域\aspnet 用户。该文件不是只读的。

我尝试通过 System.Security.Permissions.FileIOPermission 查找权限。它只是说禁止访问所有文件。

我不确定我还能做什么。

我在 Framework 3.5、WinXP、IIS 5.1 上使用 Visual Studio 2008、ASP.net 2.0。

【问题讨论】:

  • 您确定您模拟的是域级别帐户而不是计算机帐户吗?您需要一个域级帐户才能访问共享。
  • @NYSystemsAnalyst,我很肯定。

标签: c# asp.net visual-studio-2008 security file-io


【解决方案1】:

ASP.NET 用户无法使用网络路径。所以你需要有一个windows帐户 将拥有所有权利,然后您需要在 web.config 中强加一些东西,如下所示。

<identity impersonate="true" userName="domainname\windowuseraccount" password="password"/>

【讨论】:

    【解决方案2】:

    我假设您已正确设置了模拟。您已关闭匿名访问,将身份验证模式设置为 Windows 并将模拟设置为 true 等。

    即使所有这些都正确完成并且冒充了正确的帐户,您仍然无法访问该文件。被模拟的帐户正在使用所谓的网络凭据。这些仅在进行模拟的机器上有效。当您尝试访问计算机本身上的文件时,访问是使用用户的凭据执行的,但对于共享上的文件,访问是作为未经身份验证的用户完成的,因此不允许访问。

    为了允许您使用用户的凭据进行远程工作,即访问共享、远程数据库的集成安全性等,您需要使用委托而不是模拟。这是一个有点复杂的主题,涉及您的 Active Directory 设置和 IIS 配置。看看this article,它应该会给你一个很好的起点。

    【讨论】:

      【解决方案3】:

      确保域用户具有安全权限共享权限。即在共享文件夹中,在属性的“共享”选项卡下以及“安全”选项卡下添加域用户。

      【讨论】:

        【解决方案4】:

        您使用的是哪个 IIS 版本?如果是版本 6,您可以将 Web 应用程序放在它自己的应用程序池中,然后将该应用程序池的标识设置为域用户帐户。然后,授予该域用户帐户访问网络共享的权限。

        【讨论】:

        • 这个还是可以的,但是需要设置整个网站的标识,因为5.1不支持应用池。
        【解决方案5】:

        仅供参考,您可以将以下内容放在一个 aspx 文件中,以验证您的页面运行的标识:

        <%@ Page Language="C#" %>
        <% Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name); %>
        

        要访问网络共享,上述用户需要是网络管理员设置的域帐户。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-08-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多