我正在运行一个ASP.NET webform,它试图使用new DirectoryInfo(path).GetFiles(pattern)
获取共享文件夹的内容。应用程序池设置为使用域用户名运行,但在执行时它会模拟我的用户名。我所在的组具有完全控制访问树中所有文件夹的权限,并且完全控制访问共享。另外,我已经Everyone
阅读,阅读&执行和列出文件夹内容访问文件夹树,然后读取&执行访问共享。
然而,当执行该语句时,我得到System.UnauthorizedAccessException:'Access to the path '\\server\share\sub1\sub2' is denied.
运行SysInternals的Process Monitor,事件显示:
Desired Access: Read Data/List Directory, Synchronize
Disposition: Open
Options: Directory, Synchronous IO Non-Alert, Open For Backup
Attributes: n/a
ShareMode: Read, Write Delete
AllocationSize: n/a
Impersonating: <MyUsername>
在同一台服务器上运行命令窗口,获取文件夹的目录列表或访问文件夹中的任何文件时都没有错误。
我错过了什么?
为什么在Process Monitor中查看的响应 ACCESS DENIED ,操作指定为 CreateFile ?
没有给予Everyone
完全控制(我认为这不会有帮助)我想不到任何更多的授权权限。
注意,我也尝试了Directory.EnumerateFiles(path, pattern)
,结果相同。
更新
网站上的身份验证为Windows Authentication
和ASP.NET impersonation
;匿名访问被禁用。特定页面不会覆盖此内容。
答案 0 :(得分:2)
好像你有一个&#34;双跳&#34;问题
当您对IIS服务器进行身份验证时,第一个是“跳”&#39; 当IIS尝试访问UNC时,是第二跳是不允许的。
IIS无法将您的凭据传递给UNC。
有关更多信息,请参阅此文章
答案 1 :(得分:0)
您获得的结果会有所不同,因为您的权限与IIS中运行您应用的帐户的权限不同。
检查为IIS站点运行应用程序池的帐户,并确保该帐户可以访问您尝试访问的UNC路径。