我对Windows权限有一点问题,我有一个脚本(我没有写过),它将文件上传到本地临时区域,然后被移动并重命名为UNC共享。
我试过了:
创建一个具有域权限的域用户,在“连接为”和“目录安全性” - 身份验证中使用该域用户,并且作为读/写用户位于目标源上。我已经使用该用户登录到测试服务器并验证该用户是否可以写入源位置。
但我收到错误消息:
Microsoft VBScript运行时错误' 800a0046'
许可被拒绝
/Admin/News/insert.asp,第56行
尝试执行此移动的相关代码是(尽管这可能与安全问题无关):
if fileUploaded then
dim fs,f,savedFileLocation
set fs=Server.CreateObject("Scripting.FileSystemObject")
savedFileLocation = server.MapPath("/Files") & "\Briefings\" & right("00" & day(now()),2) & right("00" & month(now()),2) & year(now()) & " - " & fileName
if not fs.FileExists(savedFileLocation) then
Set f=fs.GetFile(pathToFile)
f.Move(savedFileLocation)
end if
set f=nothing
set fs=nothing
end if
任何指针都会感激不尽,我发现IIS的安全权限是一场噩梦!
答案 0 :(得分:0)
IIS6支持应用程序池,您可以将应用程序池作为命名用户帐户而不是IUSR运行。如果您有一个方便的AD域,那么这可以是一个域帐户,并且共享很简单。如果您没有使用AD域,那么您仍然可以解决这个问题 - 只需在两个框中创建一个具有相同用户名和密码的帐户,NTLM将自动运行。
自从我触及IIS6以来已经有一段时间了,但我似乎记得IIS6作为NT AUTHORITY \ NETWORK SERVICE开箱即用。如果是这种情况并且你有一个方便的域名,你也可以给出神奇的DOMAIN \ MACHINENAME $帐户权限,它也应该有效。
答案 1 :(得分:0)
尝试在您的站点中打开此UNC文件夹/共享的IIS属性(我猜它是设置为虚拟文件夹)并查看您的用户是否具有写入权限。基本上我宁愿给app pool用户写入权限而不是创建新用户,但这是你的选择。因为该站点的应用程序池必须以此用户名运行。
在任何情况下,因为在app pool用户下发生了文件传输,如果你有集群或负载均衡的系统,你需要在每个Web服务器上验证这两个文件夹的权限(本地和UNC共享)。