Condividi tramite


Funzionamento di AccessCheck

Quando un thread tenta di accedere a un oggetto a protezione diretta, il sistema concede o nega l'accesso. Se l'oggetto non dispone di un elenco di controllo di accesso discrezionale (DACL), il sistema concede l'accesso; in caso contrario, il sistema cerca voci di controllo di accesso (ACEs) nella DACL dell'oggetto che si applicano al thread. Ogni ACE nell'elenco DACL dell'oggetto specifica i diritti di accesso consentiti o negati per un trustee, che può essere un account utente, un account di gruppo o una sessione di accesso .

DACLs

Il sistema confronta il fiduciario in ogni ACE con i fiduciari identificati nel token di accesso del thread. Un token di accesso contiene identificatori di sicurezza (SID) che identificano l'utente e gli account di gruppo a cui appartiene l'utente. Un token contiene anche un SID di accesso che identifica la sessione di accesso corrente. Durante un controllo di accesso, il sistema ignora i SID di gruppo non abilitati. Per altre informazioni sui SID abilitati, disabilitati e di sola negazione, vedere attributi SID in un token di accesso.

In genere, il sistema usa il token di accesso primario del thread che richiede l'accesso. Tuttavia, se il thread rappresenta un altro utente, il sistema usa il token di rappresentazione del thread.

Il sistema esamina ogni ACE in sequenza fino a quando non si verifica uno degli eventi seguenti:

  • Un ace di accesso negato nega esplicitamente uno dei diritti di accesso richiesti a uno dei trustee elencati nel token di accesso del thread.
  • Una o più voci di controllo dell'accesso (ACE) consentite per i trustee elencati nel token di accesso del thread concedono esplicitamente tutti i diritti di accesso richiesti.
  • Tutti gli ACL sono stati controllati ed è ancora presente almeno un diritto di accesso richiesto che non è stato consentito in modo esplicito, nel qual caso l'accesso viene negato in modo implicito.

La figura seguente mostra come l'elenco DACL di un oggetto può consentire l'accesso a un thread negando l'accesso a un altro.

dacl che concede diritti di accesso diversi a thread diversi

Per il thread A, il sistema legge ACE 1 e nega immediatamente l'accesso perché l'ACE di accesso negato si applica all'utente nel token di accesso del thread. In questo caso, il sistema non controlla gli ACL 2 e 3. Per Thread B, ACE 1 non si applica, quindi il sistema passa ad ACE 2, che consente l'accesso in scrittura e ACE 3 che consente l'accesso in lettura ed esecuzione.

Poiché il sistema smette di controllare gli ACL quando l'accesso richiesto viene concesso o negato in modo esplicito, l'ordine degli ACL in un daCL è importante. Nota che se l'ordine ACE fosse diverso nell'esempio, il sistema potrebbe concedere l'accesso al thread A. Per gli oggetti di sistema, il sistema operativo definisce un ordine degli ACE in una DACL preferito.