好。 这里我们试图在Windows Server 2008 R2的IIS 7.5中设置一个经典的ASP网站。 在网站的根目录下有一个名为dbc的文件夹,它具有一个用于在处理每个页面时读取和写入某些信息的文件。
问题是,如果我授予IUSR写权限,IIS_IUSRS写权限,或DefaultAppPool写权限,我得到“访问path'E:.. \ websiteroot \ dbc \ filename.txt'被拒绝”
但是,如果我授予每个人在该dbc文件夹的写访问权限,那么我不会得到任何错误,一切似乎完美。
更多信息:网站以经典stream水线模式运行,匿名身份validation已启用(也许这是唯一的身份validation启用)。我尝试使用IUSR帐户以及应用程序池标识的匿名身份validation。 在我的情况下,ApplicationPoolIdentity是网站的身份validation。 我们使用COM +作为文件I / O。 和经典的ASP Server.CreateObject来实例化一个对象。 COM +作为networking服务运行。
思考? 我不想授予所有人的写入权限。 我错过了什么吗?
解决:这是我做的。
我的网站名为CipherDemo运行在IIS 7.5中的AppPoolIdentity下,可以通过Identity IIS AppPool \ CipherDemofind。 我用ICACLS在该文件夹上给RW权限。
而实际上正在执行文件I / O的COM +正在networking服务标识下运行。 当我使用进程监视器来跟踪访问拒绝错误时,它变成了networking服务只有该文件夹的读取权限。
我使用ICACLS“foldername”/ grant:r“NT AUTHORITY \ NETWORKSERVICE”:( OI)(CI)RXW / T授予对该文件夹的写入权限。
解决了。
我的意图是,因为网站作为CipherDemo身份运行,这将是用于通过COM +访问该文件的帐户。 但是,发现COM +仍然可以在自己的身份界限上工作,这是令人尴尬的。
在IIS 7.5(以及可选的IIS 7)下,所有工作者都使用应用程序池标识运行:用户“IIS AppPool * PoolName *”。
授予对该用户的访问权限,而不是每个人(您需要在select标识对话框中键入名称 – 它不会显示在查找function中)。
在iis.net上有一个非常有用的页面,它涵盖了更多细节。
另请注意:在IIS7(Server 2008)下:
icacls.exe )。 最后,SQL Server的身份select不知道应用程序池标识:最初使用CREATE LOGIN和CREATE USER ,之后可以使用GUI来授予angular色等。
您可以直接input,通过NTFS GUI添加帐户。 该名称格式为IIS APPPOOL{app pool name} ,例如IIS APPPOOL \ DefaultAppPool。 (请参阅此Microsoft支持文章 )
另一种解决scheme:我一直使用“networking服务”帐户作为应用程序池用户授予它的写权限。
如果您只想将文件夹WRITE权限授予特定用户,则还应该将站点的“匿名用户标识”更改为“特定用户”,而不是“应用程序池标识”。