2009-05-05 105 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); %> 

要訪問網絡共享上述用戶將需要通過網絡的域帳戶設置管理員。