从ASP访问IIS WMI提供程序的访问被拒绝错误

Al *_*son 5 wmi iis-6 access-denied asp-classic

我有一台运行IIS 6的Windows 2003服务器,并且有一些自动设置和创建网站的脚本.他们没有在我调试的新服务器上工作(他们已经在其他3台W2K3服务器上工作愉快).问题似乎归结为IIS提供程序上的WMI安全性.下面的ASP代码表示问题(虽然它不是导致问题的原始代码 - 这是问题的简化演示).

Set wmiProvider = GetObject("winmgmts:\\.\root\MicrosoftIISv2")
If wmiProvider is Nothing Then
Response.Write "Failed to get WMI provider MicrosoftIISv2<br>"
End If

Response.Write "Querying for IISWebService...<br>"
Set colItems = wmiProvider.ExecQuery("Select * From IISWebServer",,0)
Response.Write "Error: " & Hex(Err.Number) & " (" & Err.Description & ")<br>"
Run Code Online (Sandbox Code Playgroud)

如果我在浏览器中运行此命令,则会在ExecQuery调用后报告访问被拒绝错误.我已经从Root分支一直为IUSR_用户设置了WMI访问权限.事实上,我可以非常愉快地使用CIMV2提供商查询IP地址信息.如果我把IUSR用户放在机器管理员组中,它一切正常,但我真的不想这样做.

这必须是DCOM/WMI安全问题,但我无法解决其他问题.谁能摆脱任何光明?

小智 0

如果您打算将其作为自己或管理员的工具运行(而不是未经洗礼的匿名群众),那么这是我过去使用的一种方法(YMMV):

  1. 在您的网站中设置一个新目录(例如 /SiteCreate)并将 WMI 脚本放置在其中
  2. 配置具有适当权限的 Windows 用户(在本例中可能是管理员,但您应该使用与您的应用程序相关的任何权限)
  3. 关闭您在步骤 1 中创建的目录的匿名访问,然后将安全性设置为仅允许您在步骤 2 中创建的用户访问(打开该目录的身份验证)

现在,当您在浏览器中导航到该目录时,您应该会收到登录提示。当您输入在步骤 2 中创建的用户名/密码时,您的脚本将具有执行 WMI 请求的适当权限。