IIS 7.5,ASP.NET,模拟以及对C:\ Windows\Temp的访问

Hei*_*nzi 9 asp.net permissions impersonation iis-7 windows-7

简介:我们的一个Web应用程序需要写入权限C:\Windows\Temp.但是,无论我多么削弱NTFS权限,procmon都会显示出来ACCESS DENIED.

背景(这可能是也可能不是相关的问题):我们正在使用OLEDB访问MS Access数据库(位于的C:\ WINDOWS\TEMP).不幸的是,这个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)
Run Code Online (Sandbox Code Playgroud)

但是,这是procmon的截图:

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
Run Code Online (Sandbox Code Playgroud)

PS:登录时MYDOMAIN\myuser,我可以C:\Windows\Temp使用Windows资源管理器创建文件,没有任何问题.

编辑:web.config的相关部分:

 <authentication mode="Windows" />
 <identity impersonate="true" />
 <authorization>
   <deny users="?" />
   <allow users="*" />
 </authorization>
Run Code Online (Sandbox Code Playgroud)

身份验证似乎有效,即System.Security.Principal.WindowsIdentity.GetCurrent().Name(在我的自定义错误页面上显示)返回MYDOMAIN\myuser.

Car*_*res 4

您是否尝试过执行以下步骤: loadUserProfile 和 IIS 7 临时目录失败