我有一个应用程序在尝试从文件系统中读取时出现System.UnauthorizedAccessException
错误。
我查看了应用程序池,我发现它正在使用Network Service
来识别它。 IIS应用程序允许使用现有帐户进行匿名身份验证,我们可以将其称为IUSR-MYSERVER
。它还启用了Integrated Windows authentication
。
如果我转到相关文件夹并添加具有读取+执行权限的Everyone
,则错误消失。但是,如果我使用相同的权限添加IUSR-MYSERVER
或NETWORK SERVICE
,我仍然会收到相同的错误。
当我在事件日志中查看错误的条目时,其用户为N/A
。
我的应用程序尝试访问文件系统的用户是什么?我认为使用Everyone
会很糟糕吗?
答案 0 :(得分:0)
如果Web应用程序使用模拟,则当前登录的用户(或匿名用户的IUSR)将访问该文件 - 使用集成Windows身份验证和IE将导致单点登录,因此打开浏览器的用户将是访问该文件。
如果未使用模拟,则使用应用程序池标识。
要确定代码中当前登录的用户,请使用System.Threading.Thread.CurrentPrincipal.Identity.Name
- 但请注意,这并不代表访问该文件的帐户。
要确定执行代码的实际身份,请使用System.Security.Principal.WindowsIdentity.GetCurrent().Name
。