У меня есть веб-сайт IIS 7.5, на котором выполняется «классический» код ASP (не ASP.NET), где сайт работает в обычном контексте службы, и включена только «Проверка подлинности Windows». Пользователи и перемещаются по сайту без каких-либо проблем, независимо от того, имеют ли они неявные права администратора на хосте IIS или нет (большинство из них не имеют). Однако когда я пытаюсь выполнить обычный запрос Win32_PingStatus в коде ASP, он терпит неудачу, если у пользователя нет прав администратора на хосте IIS. Вот мой код ...
On Error Resume Next
asset = "Computer123"
pingtest = False
query = "Select StatusCode, Address FROM Win32_PingStatus " & _
"WHERE Address=" & Chr(34) & asset & Chr(34)
Set colPingStatus = GetObject("winmgmts:" &_
"{impersonationLevel=impersonate}//./root/cimv2").ExecQuery(query)
If err.Number <> 0 Then
Response.Write "Access Denied (error: " & err.Number & " / " & err.Description & ")"
Response.End
End If
For Each objItem In colPingStatus
If objItem.StatusCode = 0 Then
pingtest = True
End If
Next
If pingtest = False Then
Response.Write asset & " is OFFLINE"
Else
Response.Write asset & " is ONLINE"
End If
Я пытался разобраться в возможностях олицетворения SWBEM и WMI, но я все еще не понимаю, возможно ли (поддерживается или не поддерживается) сделать это независимо от контекста сеанса пользователя / браузера. Каждый пользователь является учетной записью домена, анонимные пользователи не могут получить доступ к сайту, поэтому кажется (и я могу ошибаться) это связано с их членством в группах и разрешениями на хосте IIS.
Во-первых, это уровень доверия вашего веб-сайта в IIS. Войдите в IIS и убедитесь, что он установлен на полную, чтобы ваш сайт мог получить доступ к внутренним ресурсам сервера.
Затем нужно дважды проверить, действительно ли пользователи, обращающиеся к сайту, проходят аутентификацию и не запускают код анонимно. Просто чтобы убедиться, что анонимная аутентификация отключена в iis, и ваш сайт заставляет пользователей проходить аутентификацию (отключите автоматический вход в ntlm в вашем браузере или запишите идентификационный код пользователя в ваше приложение, чтобы быть уверенным, что аутентификация происходит вдвойне).
Затем нужно проверить разрешения wmi для типа пользователей, которые обращаются к вашему сайту. Вы можете использовать wmimgmt.msc, чтобы открыть настройки безопасности wmi для вашего сервера. Вы можете проверить свои разрешения wmi, войдя на свой сервер с обычным пользователем и попытавшись выполнить команды wmi (вы можете использовать get-wmiobject, wbemtest.exe или vbscript).