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 属性设置为所需值来设置 SWbemServices、SWbemObject、SWbemObjectSet、SWbemObjectPath 和 SwbemLocator 对象的模拟级别。 以下示例演示如何为 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 |
类型库 |
|
DLL |
|
CLSID |
CLSID_SWbemSecurity |
IID |
IID_ISWbemSecurity |