Propriedade SWbemSecurity.ImpersonationLevel

A propriedade ImpersonationLevel é um inteiro que define o nível de representação COM atribuído a esse objeto. Essa configuração determina se os processos pertencentes à WMI (Instrumentação de Gerenciamento do Windows) podem detectar ou usar suas credenciais de segurança ao fazer chamadas a outros processos. Para obter mais informações sobre níveis de representação, confira Configuração da segurança de Client_Application_Process.

Se você não definir o nível de representação especificamente em um moniker ou definindo a propriedade SWBemSecurity.ImpersonationLevel em um objeto que possa ser protegido, o WMI definirá o nível de representação padrão como o valor especificado na chave do Registro de nível de representação padrão. Se essa configuração não for suficiente, o provedor não atenderá à sua solicitação e a chamada à API do WMI poderá falhar com um código de erro wbemErrAccessDenied (2147749891/0x80041003).

Para ver uma explicação dessa sintaxe, confira Convenções de documento para a API de script.

Essa propriedade é leitura/gravação.

Sintaxe

SWbemSecurity.ImpersonationLevel As Integer

Valor da propriedade

Comentários

Como um nível de representação do DCOM, essa propriedade pode ser definida com um dos seguintes valores:

Valor Descrição
Anônimo Oculta as credenciais do autor da chamada. Na verdade, o WMI não dá suporte a esse nível de representação; se um script especificar impersonationLevel=Anonymous, o WMI atualizará silenciosamente o nível de representação para Identify. No entanto, isso é, de certa forma, uma ação sem sentido porque os scripts que usam o nível Identify provavelmente falharão.
Identificar Habilitam os objetos a consultar as credenciais do autor da chamada. Os scripts que usam esse nível de representação provavelmente falharão; o nível Identify normalmente permite que você faça não mais do que verificar listas de controle de acesso. Você não poderá executar scripts em computadores remotos usando Identify.
Impersonate Permite que os objetos utilizem as credenciais do chamador. É recomendável que você use esse nível de representação com scripts do WMI. Ao fazer isso, o script do WMI usará suas credenciais de usuário; assim, ele poderá executar todas as tarefas que você tem permissão para executar.
Delegar Permite que os objetos deem permissão para outros objetos utilizarem as credenciais do chamador. A delegação permite que um script use suas credenciais em um computador remoto e, asism, permite que esse computador remoto use suas credenciais em outro computador remoto. Embora você possa usar esse nível de representação em scripts do WMI, você deve fazê-lo somente se necessário, pois isso pode representar um risco à segurança.
Você não pode usar o nível de representação Delegate, a menos que todas as contas de usuário e as contas de computador envolvidas na transação tenham sido marcadas como Confiáveis para delegação no Active Directory. Isso ajuda a minimizar os riscos à segurança. Embora um computador remoto possa usar suas credenciais, ele só poderá fazer isso se ele e outros computadores envolvidos na transação forem confiáveis para delegação.

Conforme observado, a representação Anonymous oculta suas credenciais e a Identify permite que um objeto remoto consulte suas credenciais, mas o objeto remoto não pode representar seu contexto de segurança. (Em outras palavras, embora o objeto remoto saiba quem você é, ele não pode "fingir" ser você). Os scripts do WMI que acessam computadores remotos usando uma dessas duas configurações geralmente falharão. Na verdade, a maioria dos scripts executados no computador local usando uma dessas duas configurações também falhará.

A representação permite que o serviço do WMI remoto use o seu contexto de segurança para executar a operação solicitada. Uma solicitação do WMI remota que usa a configuração Impersonate normalmente é bem-sucedida, desde que suas credenciais tenham privilégios suficientes para executar a operação pretendida. Em outras palavras, você não pode usar o WMI para executar uma ação (remotamente ou não) que você não tenha permissão para executar fora do WMI.

Definir impersonationLevel como Delegate permite que o serviço do WMI remoto passe suas credenciais para outros objetos e isso geralmente é considerado um risco à segurança.

Você pode definir o nível de representação de um objeto SWbemServices, SWbemObject, SWbemObjectSet, SWbemObjectPath e SwbemLocator definindo a propriedade ImpersonationLevel com o valor desejado. O exemplo a seguir mostra como definir o nível de representação para um objeto SWbemObject:

objinstance.Security_.ImpersonationLevel = _
    wbemImpersonationLevelImpersonate

Você também pode especificar níveis de representação como parte de um moniker. O exemplo a seguir define o nível de autenticação e o nível de representação e recupera uma instância do Win32_Service.

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

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows Vista
Servidor mínimo com suporte
Windows Server 2008
Biblioteca de tipos
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemSecurity
IID
IID_ISWbemSecurity

Confira também

SWbemSecurity

Configurar segurança de Client_Application_Process

WbemImpersonationLevelEnum