SWbemSecurity.ImpersonationLevel 属性

ImpersonationLevel 属性是一个整数,定义了分配给该对象的 COM 模拟级别。 此设置确定在调用其他进程时,Windows Management Instrumentation (WMI) 拥有的进程是否可以检测或使用安全凭据。 有关模拟级别的详细信息,请参阅设置 Client_Application_Process 安全性

如果未在名字对象中专门设置模拟级别,也未通过在安全对象上设置 SWBemSecurity.ImpersonationLevel 属性来设置模拟级别,WMI 会将默认模拟级别设置为在默认模拟级别注册表项中指定的值。 如果此设置不充分,提供程序不会为请求提供服务,并且对 WMI API 的调用可能会失败,错误代码为 wbemErrAccessDenied (2147749891/0x80041003)。

有关此语法的说明,请参阅脚本 API 的文档约定

此属性是可读写的。

语法

SWbemSecurity.ImpersonationLevel As Integer

属性值

备注

作为 DCOM 模拟级别,可以将此属性设置为以下值之一:

说明
匿名 隐藏调用方的凭据。 实际上,WMI 并不支持该模拟级别;如果脚本指定 impersonationLevel=Anonymous,WMI 会在不进行提示的情况下将模拟级别升级为“标识”。 然而,此练习在某种程度上毫无意义,因为使用“标识”级别的脚本很可能会失败。
识别 允许对象查询调用方的凭据。 使用此模拟级别的脚本很可能会失败;“标识”级别通常只允许检查访问控制列表。 将无法使用标识对远程计算机运行脚本。
Impersonate 允许对象使用调用方的凭据。 建议将此模拟级别与 WMI 脚本配合使用。 执行此操作时,WMI 脚本将使用你的用户凭据;因此,它将能够执行你能执行的任何任务。
委托 使对象能够允许其他对象使用调用方的凭据。 借助委派,脚本可在远程计算机上使用你的凭据,而该远程计算机也能在另一台远程计算机上使用该凭据。 虽然可在 WMI 脚本中使用此模拟级别,但应仅在必要时才这样做,因为它可能会带来安全风险。
除非事务中涉及的所有用户帐户和计算机帐户都已在 Active Directory 中标记为“信任委派”,否则无法使用委派模拟级别。 这有助于最大程度降低安全风险。 尽管远程计算机可使用你的凭据,但仅当它和事务中涉及的任何其他计算机都被信任委派时,它才能这样做。

如前所述,匿名模拟会隐藏凭据,“标识”允许远程对象查询凭据,但远程对象无法模拟安全上下文。 (换言之,尽管远程对象知道你是谁,但它不能“假装”成你。)使用这两种设置之一访问远程计算机的 WMI 脚本通常会失败。 事实上,大多数使用这两种设置之一在本地计算机上运行的脚本也会失败。

通过模拟,远程 WMI 服务可使用安全上下文执行请求的操作。 使用模拟设置的远程 WMI 请求通常会成功,前提是凭据具有充足特权来执行预期的操作。 换言之,不能使用 WMI(远程或以其他方式)执行你无权在 WMI 外部执行的操作。

如果将 impersonationLevel 设置为“委派”,远程 WMI 服务可将凭据传递给其他对象,这种行为通常被视为一种安全风险。

可以通过将 ImpersonationLevel 属性设置为所需值来设置 SWbemServicesSWbemObjectSWbemObjectSetSWbemObjectPathSwbemLocator 对象的模拟级别。 以下示例演示如何为 SWbemObject 对象设置模拟级别:

objinstance.Security_.ImpersonationLevel = _
    wbemImpersonationLevelImpersonate

还可以将模拟级别指定为名字对象的一部分。 以下示例设置身份验证级别和模拟级别,并检索 Win32_Service 实例。

Set objinst = GetObject("WinMgmts:{impersonationLevel=impersonate,"& _
                         "authenticationLevel=pktPrivacy}"& _
                         "!root/cimv2:Win32_service='ALERTER'")

要求

要求
最低受支持的客户端
Windows Vista
最低受支持的服务器
Windows Server 2008
类型库
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemSecurity
IID
IID_ISWbemSecurity

另请参阅

SWbemSecurity

设置 Client_Application_Process 安全性

WbemImpersonationLevelEnum