Share via


Privilegi

Un privilegio è il diritto di un account, ad esempio un account utente o di gruppo, di eseguire varie operazioni correlate al sistema nel computer locale, ad esempio l'arresto del sistema, il caricamento dei driver di dispositivo o la modifica dell'ora di sistema. I privilegi differiscono dai diritti di accesso in due modi:

  • Privilegi controllano l'accesso alle risorse di sistema e alle attività correlate al sistema, mentre i diritti di accesso controllano l'accesso agli oggetti a protezione diretta.
  • Un amministratore di sistema assegna privilegi agli account utente e di gruppo, mentre il sistema concede o nega l'accesso a un oggetto a protezione diretta in base ai diritti di accesso concessi negli ACL dell'oggetto.

Ogni sistema dispone di un database account che archivia i privilegi detenuti dagli account utente e di gruppo. Quando un utente accede, il sistema produce un token di accesso che contiene un elenco dei privilegi dell'utente, inclusi quelli concessi all'utente o ai gruppi a cui appartiene l'utente. Si noti che i privilegi si applicano solo al computer locale; un account di dominio può avere privilegi diversi in computer diversi.

Quando l'utente tenta di eseguire un'operazione con privilegi, il sistema controlla il token di accesso dell'utente per determinare se l'utente dispone dei privilegi necessari e, in tal caso, controlla se i privilegi sono abilitati. Se l'utente non supera questi test, il sistema non esegue l'operazione.

Per determinare i privilegi mantenuti in un token di accesso, chiamare la funzione GetTokenInformation , che indica anche quali privilegi sono abilitati. La maggior parte dei privilegi è disabilitata per impostazione predefinita.

L'API Windows definisce un set di costanti stringa, ad esempio SE_ASSIGNPRIMARYTOKEN_NAME, per identificare i vari privilegi. Queste costanti sono uguali in tutti i sistemi e sono definite in Winnt.h. Per una tabella dei privilegi definiti da Windows, vedere Costanti dei privilegi. Tuttavia, le funzioni che ottengono e modificano i privilegi in un token di accesso usano il tipo LUID per identificare i privilegi. I valori LUID per un privilegio possono essere diversi da un computer a un altro e da un avvio a un altro nello stesso computer. Per ottenere il LUID corrente che corrisponde a una delle costanti stringa, usare la funzione LookupPrivilegeValue . Utilizzare la funzione LookupPrivilegeName per convertire un LUID nella costante stringa corrispondente.

Il sistema fornisce un set di nomi visualizzati che descrivono ognuno dei privilegi. Queste informazioni sono utili quando è necessario visualizzare una descrizione di un privilegio per l'utente. Utilizzare la funzione LookupPrivilegeDisplayName per recuperare una stringa di descrizione corrispondente alla costante stringa per un privilegio. Ad esempio, nei sistemi che usano l'inglese statunitense, il nome visualizzato per il privilegio SE_SYSTEMTIME_NAME è "Cambia l'ora di sistema".

È possibile usare la funzione PrivilegeCheck per determinare se un token di accesso contiene un set specificato di privilegi. Ciò è utile principalmente per le applicazioni server che rappresentano un client.

Un amministratore di sistema può usare strumenti di amministrazione, ad esempio User Manager, per aggiungere o rimuovere privilegi per gli account utente e di gruppo. Gli amministratori possono usare le funzioni LSA ( Local Security Authority ) a livello di codice per usare i privilegi. Le funzioni LsaAddAccountRights e LsaRemoveAccountRights aggiungono o rimuovono privilegi da un account. La funzione LsaEnumerateAccountRights enumera i privilegi mantenuti da un account specificato. La funzione LsaEnumerateAccountsWithUserRight enumera gli account che contengono un privilegio specificato.

Costanti di autorizzazione

Abilitazione e disabilitazione dei privilegi in C++