2009-05-05 123 views
2

我每次尝试访问(只是读取)网络共享上的文件“\\ server \ folder1 \ folder2 \ file”时出现UnauthorizedAccessException .PDF“。C#3.5 ASP.net文件IO问题,UnauthorizedAccessException在网络共享文件

我模拟域\ aspnet用户已经读取&写访问上述文件夹。该文件不是只读的。

我试图通过System.Security.Permissions.FileIOPermission找到权限。它只是说对所有文件的NoAccess。

我不知道我还能做些什么。

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

+0

你确定你是在冒充域级帐户而不是机器帐户吗?您将需要一个域级帐户才能访问该共享。 – NYSystemsAnalyst 2009-05-05 16:24:27

+0

@NYSystemsAnalyst,我很积极。 – jinsungy 2009-05-05 16:26:39

回答

3

ASP.NET用户不能使用网络路径。所以你需要有一个windows账户,其中 将拥有所有权利,然后你需要在web.config中伪装一些东西,如下所示。

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

确保域用户拥有安全权共享权限。也就是说,在共享文件夹上,将域用户添加到属性中的“共享”选项卡下,以及“安全性”选项卡下。

3

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

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

为了让您使用用户的凭证进行远程工作,即访问共享,远程数据库的集成安全性等,您需要使用委派而不是模拟。这是一个涉及您的Active Directory设置和您的IIS配置的复杂主题。看看this article,它应该给你一个开始的好地方。

0

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

0

仅供参考,你可以放置在一个aspx文件中的下列验证什么确定您的网页运行为:

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

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