Delega con WMI

Quando si esegue uno script in un sistema locale che ottiene dati da un sistema remoto, WMI fornisce le credenziali al provider dei dati nel sistema remoto. Questo richiede solo un livello di rappresentazione di Impersonate, perché è necessario un solo hop di rete. Tuttavia, se lo script si connette a WMI nel sistema remoto e tenta di aprire un file di log in un sistema remoto aggiuntivo, lo script non riesce a meno che il livello di rappresentazione non sia Delegato. Il livello di rappresentazione delegato è richiesto da qualsiasi operazione che implica più hop di rete. Per altre informazioni sulla sicurezza DCOM in WMI, vedere Impostazione della sicurezza del processo applicazione client. Per altre informazioni su una connessione hop a una rete tra due computer, vedere Connessione a WMI in un computer remoto.

Per usare la delega per connettersi a un computer tramite un altro computer

  1. Abilitare la delega in Active Directory (Utenti e computer di Active Directory in attività Pannello di controlloAdministrative) nel controller di dominio. L'account nel sistema remoto deve essere contrassegnato come Attendibile per la delega e l'account nel sistema locale non deve essere contrassegnato come Account è sensibile e non può essere delegato. il sistema locale, il sistema remoto e il controller di dominio devono essere membri dello stesso dominio o nei domini attendibili.

    Nota L'uso della delega è un rischio di sicurezza perché offre processi esterni al controllo diretto la possibilità di usare le credenziali.

  2. Modificare il codice nel modo seguente per indicare che si vuole usare la delega.

    Powershell

    Impostare il parametro -Impersonation nel cmdlet WMI su Delegate.

    Vbscript

    Impostare il parametro impersonationLevel su Delegate nella chiamata a SWbemLocator.ConnectServer o Delegatenella stringa moniker . È anche possibile impostare la rappresentazione in un oggetto SWbemSecurity.

    C++

    Impostare il parametro livello di rappresentazione su RPC_C_IMP_LEVEL_DELEGATE nella chiamata a CoInitializeSecurity o CoSetProxyBlanket. Per altre informazioni su quando effettuare queste chiamate, vedere Inizializzazione COM per un'applicazione WMI.

    Per passare l'identità client ai server COM remoti in C++, impostare il mantello nella chiamata a CoSetProxyBlanket. Per altre informazioni, vedere Mantello.

Esempio

Nell'esempio di codice seguente viene illustrata una stringa moniker che imposta la rappresentazione su Delegate. Tenere presente che l'autorità deve essere impostata su Kerberos.

set objWMIServices = Getobject("winmgmts:{impersonationLevel=Delegate,authority=kerberos:MyDomain\Computer_B}!\\ComputerB\Root\CIMv2")

Nell'esempio di codice seguente viene illustrato come impostare la rappresentazione su Delegate (valore 4) usando SWbemLocator.ConnectServer.

Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objLocator.ConnectServer(Computer_B, _
                                             "Root\CIMv2", _
                                             AdminAccount, _
                                             MyPassword, _
                                             "kerberos:Domain\Computer_B")
objWMIService.Security_.ImpersonationLevel = 4

Protezione di una connessione WMI remota

Creazione di processi in remoto con WMI