IIS 7.5、ASP.NET、模拟和访问C:\Windows\Temp

9
概述: 我们的一个Web应用程序需要对 C:\Windows\Temp 进行写入访问。然而,无论我如何弱化NTFS权限,procmon 都显示 ACCESS DENIED背景(可能与问题相关或不相关):我们正在使用OLEDB访问位于C:\Windows\Temp之外的MS Access数据库。不幸的是,这个OLEDB驱动程序需要对用户配置文件的TEMP目录进行写访问(当在IIS 7.5下运行时,这个目录恰好是C:\Windows\Temp),否则将抛出可怕的“未指定错误”OleDbException。有关详细信息,请参见KB 926939。我按照KB文章中的步骤操作,但没有帮助。 详情
这是 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的屏幕截图:

procmon screenshot

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配置问题。 - Heinzi
Web.config 文件中 <authorization ...><identity ...> 的值是什么?IIS 是否配置为允许匿名访问(不确定在 IIS7 中是否适用)? - scherand
@scherand:我已经更新了我的问题。IIS7.5似乎在匿名访问方面使用.NET设置。 - Heinzi
你解决了这个问题吗?! - Sir Crispalot
@SirCrispalot:我们通过用 XML 文件替换 Access 数据库来“解决”了它。不幸的是,我们从未找到原始问题的根本原因。 - Heinzi
显示剩余3条评论
1个回答

4

好的,那就是我所做的(授予权限)。我甚至进一步授予了完全的权限。 - Heinzi
如果那是临时目录所在的位置,那么您没有设置它来加载用户配置文件。 - Andrew Barber
1
@AndrewBarber:文章中说:“答案非常简单:关闭loadUserProfile,或者将临时目录的ACL设置为允许写入。”请注意“或者*”。因此,根据文章,仅在临时目录上设置ACL应该可以解决问题,但实际上并没有。但是,使用loadUserProfile的解决方法确实有用,所以对答案进行+1(尚未“接受答案”,因为它没有回答原始问题——“即使给予完全权限,为什么无法写入C:\Windows\Temp”)。 :-) - Heinzi
同意@Heinzi的看法...虽然它并没有回答原问题,但确实解决了问题,所以+1。 - FastTrack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接