Condividi tramite


Esecuzione di operazioni con privilegi

Le operazioni con privilegi richiedono privilegi di sicurezza come SeLoadDriverPrivilege (wbemPrivilegeLoadDriver nella Costanti API di scripting), un privilegio che deve essere abilitato per un account che sta caricando un driver di dispositivo. Non è possibile aggiungere privilegi a un amministratore o a un utente tramite WMI, è possibile abilitare solo i privilegi già presenti nell'account. Per un elenco dei privilegi, vedere Privilege_Constants.

Per impostazione predefinita, un utente locale in un computer può leggere i dati statici dal repository WMI, scrivere nelle istanze fornite dai provider ed eseguire i metodi del provider, a meno che il provider non applichi requisiti di sicurezza speciali propri. Solo gli amministratori possono connettersi a un computer remoto, modificare i descrittori di sicurezza o modificare i dati del repository WMI statici, ad esempio una definizione di classe WMI. Tutti i privilegi sono abilitati per una connessione remota. Per altre informazioni, vedere Protezione di una connessione WMI remota.

Le costanti dei privilegi per C++ differiscono da quelle usate dai linguaggi di automazione, ad esempio Visual Basic. Gli script devono usare il valore della costante anziché il nome. Per ulteriori informazioni, vedere Esecuzione di operazioni con privilegi tramite C++ o Esecuzione di operazioni con privilegi tramite VBScript.

Una causa comune di errori di accesso negato quando si usa WMI è la mancanza di un privilegio abilitato per le operazioni, ad esempio ottenere tutte le istanze di Win32_NTEventlogFile. Senza abilitare il privilegio sesecurity, non è possibile accedere al file di log di sicurezza.

Nell'esempio di codice VBScript seguente viene illustrato come impostare il privilegio seSecurity nella stringa del moniker. Quando usato nel moniker, il nome del privilegio tra parentesi omette la parte iniziale "Se". Per altre informazioni, vedere Costruzione di una stringa moniker.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate,(Security)}!\\" _
    & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery _
    ("Select * from Win32_NTEventLogFile " _
    & "Where LogFileName='Security'")
For Each LogFile in colFiles
Wscript.Echo LogFile.NumberOfRecords
Next

costanti dei privilegi