默认情况下,网络服务帐户是否应接收临时文件权限?
最近,我正在通过Web表单从Crystal Reports生成PDF。失败了,我确定是由c:\ windows \ temp目录上的权限设置引起的。我为网络服务帐户授予了对该文件夹的完全访问权限,这可以立即解决此问题。但是,默认情况下,网络服务帐户没有这些权限是有原因的吗?
里克·斯特拉尔(Rick Strahl)在这里问这个问题。听起来这样做应该没有任何问题,但是Rick不清楚为什么要这样设置默认值。
Web服务器是Windows Server 2003
解决方案
这些天来,默认选项将趋向于更加安全。我认为没有其他原因。
我遇到了与我们相同的问题,在我的环境中,只是给予了许可并继续前进。
这篇文章表明这是Crystal Reports的错,它明确引用了%WINDIR%\ Temp而不是使用诸如Path.GetTempPath()之类的API。实际上,在Windows 2003的网络服务帐户下运行时,我已经看到Path.GetTempPath()返回%WINDIR%\ Temp。
%windows%\ temp不适用于一般的调音和调皮。很明显,Crystal Reports正在滥用该目录。当开发人员过于懒惰以至于无法使用管理员帐户启动计算机时,就会发生这种情况。
每个用户(包括网络服务)都有自己的临时空间,在"文档和设置"下具有完全访问权限。优胜者的行为不像CR,而是使用自己的临时空间。
简而言之,win \ temp的默认权限没有任何问题。我相信这仅仅是为了Windows的内部工作。 (再说一次,如果该目录最初不存在,那么对每个相关人员来说会更好。)
这篇关于创建临时文件的文章有一些评论,这些评论支持使用Windows temp文件夹。
关于使用网络服务帐户的msdn文章指出:"如果ASP.NET应用程序需要在其他位置使用文件或者文件夹,则必须专门启用访问权限"。这告诉我,对temp文件夹的默认限制不是因为临时文件夹被挑出来,但是默认情况下,IIS根文件夹以外的所有其他位置都受到限制。