【发布时间】:2011-02-28 16:54:57
【问题描述】:
总结:我们的一个 Web 应用程序需要对 C:\Windows\Temp 的写入权限。但是,无论我如何削弱NTFS权限,procmon都会显示ACCESS DENIED。
背景(可能与问题相关,也可能不相关):我们正在使用 OLEDB 访问 MS Access 数据库(位于 C:\外部窗口\临时)。不幸的是,这个 OLEDB 驱动程序需要对用户配置文件的 TEMP 目录(在 IIS 7.5 下运行时恰好是 C:\Windows\Temp)的写入权限,否则会引发可怕的“未指定错误”OleDbException。有关详细信息,请参阅KB 926939。我按照知识库文章中的步骤操作,但没有帮助。
详情:
这是icacls C:\Windows\Temp 的输出。出于调试目的,我授予了Everyone 的完全权限。
C:\Windows\Temp NT AUTHORITY\SYSTEM:(OI)(CI)(F)
CREATOR OWNER:(OI)(CI)(IO)(F)
BUILTIN\IIS_IUSRS:(OI)(CI)(S,RD)
BUILTIN\Users:(CI)(S,WD,AD,X)
BUILTIN\Administrators:(OI)(CI)(F)
Everyone:(OI)(CI)(F)
然而,这是procmon的截图:
Desired Access: Generic Read/Write, Delete
Disposition: Create
Options: Synchronous IO Non-Alert, Non-Directory File, Random Access, Delete On Close, Open No Recall
Attributes: NT
ShareMode: None
AllocationSize: 0
Impersonating: MYDOMAIN\myuser
PS:当我以MYDOMAIN\myuser 登录时,我可以使用Windows 资源管理器在C:\Windows\Temp 中创建文件,没有任何问题。
编辑:web.config 的相关部分:
<authentication mode="Windows" />
<identity impersonate="true" />
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
身份验证似乎有效,即System.Security.Principal.WindowsIdentity.GetCurrent().Name(显示在我的自定义错误页面上)返回MYDOMAIN\myuser。
【问题讨论】:
-
PS:我也考虑过将其发布到 serverfault,但我猜这是 ASP.NET 处理模拟的问题,而不是 Windows 配置问题。
-
Web.config中的<authorization ...>和<identity ...>的值是什么,IIS 是否配置为允许匿名访问(不确定这是否仍然适用于 IIS7)? -
@scherand:我已经更新了我的问题。 IIS7.5 似乎使用 .net 设置 w.r.t。匿名访问。
-
嗯 - 这超出了我的范围,很抱歉打扰了您 :( 如果您想尝试并且尚未这样做,您可以通过
HttpContext.Current.User.Identity.Name或System.Threading.Thread.CurrentPrincipal.Identity.Name检查身份,如果您觉得喜欢阅读我发现了以下文章Breaking Changes for ASP.NET 2.0 applications running in Integrated mode on IIS 7.0,但我完全不确定这是否会有所帮助...... -
@scherand:没问题,感谢您的时间(和链接)!
标签: asp.net iis-7 windows-7 permissions impersonation