Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp classic 访问被拒绝错误从ASP访问IIS WMI提供程序_Asp Classic_Iis 6_Wmi_Access Denied - Fatal编程技术网

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

Asp classic 访问被拒绝错误从ASP访问IIS WMI提供程序,asp-classic,iis-6,wmi,access-denied,Asp Classic,Iis 6,Wmi,Access Denied,我有一台运行IIS 6的Windows 2003服务器,还有一些脚本可以自动设置和创建网站。他们没有在一台新服务器上工作,他们已经在另外3台W2K3服务器上愉快地工作了。问题似乎归结为IIS提供程序上的WMI安全性。下面的ASP代码表示问题,尽管不是原始代码导致问题-这是问题的简化演示 Set wmiProvider = GetObject("winmgmts:\\.\root\MicrosoftIISv2") If wmiProvider is Nothing Then Response.Wr

我有一台运行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>"
如果在浏览器中运行此操作,则会在ExecQuery调用后报告访问被拒绝错误。我已经为IUSR_uu用户从根分支设置了WMI访问权限。事实上,我可以很高兴地使用CIMV2提供程序查询IP地址信息。如果我把IUSR用户放在machineadmins组中,这一切都会起作用,但我真的不想这么做


这一定是DCOM/WMI安全问题,但我无法确定还有什么其他问题。有人能解释一下吗?

如果这是你打算为自己或你的管理员运行的工具,而不是未清洗的匿名群众,那么我在过去的YMMV中使用了以下方法:

在您的网站中设置一个新目录,例如/site创建并将WMI脚本放在那里 在这种情况下,请配置具有适当权限(可能是管理员)的Windows用户,但您应该使用与应用程序相关的任何内容 关闭对您在步骤1中创建的目录的匿名访问,然后将安全设置为仅允许您在步骤2中创建的用户访问打开该目录的身份验证
现在,当您在浏览器中导航到该目录时,应该会得到一个登录提示。当您输入在步骤2中创建的用户名/密码时,您的脚本将具有执行WMI请求的相应权限。

在阅读G.Stoynev询问Windows日志中是否记录了任何事件的评论后,我检查了试图通过WMI远程访问IIS的服务器上的事件日志,瞧,我发现了一个事件,内容如下:

对root\WebAdministration命名空间的访问被拒绝,因为该命名空间被标记为RequireEncryption,但脚本或应用程序试图以低于Pkt_Privacy的身份验证级别连接到此命名空间。将身份验证级别更改为Pkt_Privacy,然后再次运行脚本或应用程序

请参见相关SO问题中的代码

下面是我添加的一些示例C代码,它似乎为我解决了这个问题:

ConnectionOptions options = new ConnectionOptions();
options.Authentication = AuthenticationLevel.PacketPrivacy;
ManagementScope managementScope = new ManagementScope(@"\\remote-server\root\WebAdministration", options);
// ...

不是DCOM问题,更是WMI安全和加密问题。尝试更改GetObject名字对象以包括模拟和pktPrivacy,例如:

设置wmiProvider=GetObjectwinmgmts:{impersonationLevel=impersonate;authenticationLevel=pktPrivacy}\root\microsoftisv2

有关更多信息,请参阅以下MS文章:

您需要为这些脚本传递显式凭据才能运行,因为它们需要高权限扫描您显示的确切错误。另外,Windows日志中是否记录了任何事件?