2008-11-09 56 views
14

我在嘗試授予{MACHINENAME} \ ASPNET和網絡服務的權限,但這並沒有什麼區別,我也嘗試了在訪問路徑時被拒絕的錯誤信息< impersonate = true />使用管理員帳戶,這也沒有什麼區別,所以我該如何確定究竟使用哪個帳戶?如何找出我的ASP.NET代碼在哪個帳戶下運行?

回答

13

要找出您的應用在任何給定時間運行的NT帳戶,請執行(在VB.NET中):

Dim User = System.Security.Principal.WindowsIdentity.GetCurrent.User 
    Dim UserName = User.Translate(GetType(System.Security.Principal.NTAccount)).Value 

使用ASP.NET時,此帳戶將與使用IIS管理器配置的應用程序池的標識匹配。請注意,匿名IIS用戶不涉及ASP.NET請求。

8

您可以使用此代碼:

C#

Response.Write("Windows Account which runs ASP.NET is: " 
    + Environment.Username); 

VB.NET

Response.Write("Windows Account which runs ASP.NET is: " _ 
    & Environment.Username) 

如果您的PC上運行在Visual Studio應用程序(本地主機)你會得到你的用戶名。如果您在IIS上部署ASP.NET Web應用程序,則可能會獲得NETWORK SERVICE帳戶,因爲這是運行IIS 6.0(Windows Server 2000的IIS 5.0上的ASPNET)的默認用戶。

Environment.UserName返回線程當前登錄的用戶。 Page.User返回ASP.NET通過身份驗證驗證的名稱,該用戶在大多數情況下獨立於運行當前線程的Windows登錄。對於匿名請求Page.User是空白的,而Environment.User將是NETWORK SERVICE。

由於mdb在對此回答的評論中正確指出,Environment.Username將簡單地返回USERNAME環境變量,該變量在進程創建時設置,在模仿等情況下不會更新。

+1

請記住,雖然,Environment.Username將直接返回USERNAME環境變量,它被設置在進程創建和未更新在冒充等情況下。 – mdb 2008-11-09 12:32:04

14

C#代碼爲vb.net答案

var user = System.Security.Principal.WindowsIdentity.GetCurrent().User; 
var userName = user.Translate(typeof (System.Security.Principal.NTAccount)); 
-3
strint t=System.Web.Security.Membership.GetUser().UserName.ToString(); 
+0

爲了未來讀者的利益,你可以添加一些文字來解釋爲什麼這個答案比較舊的答案更可取? – Flexo 2013-03-13 18:00:12

相關問題