Architettura della tecnologia ACL
Lo spazio dei nomi System.Security.AccessControl fornisce l'accesso agli elenchi di controllo di accesso (ACL) tramite pratiche classi che astraggono buona parte della complessità del sistema di sicurezza basato su ACL di Windows. Lo spazio dei nomi System.Security.AccessControl contiene inoltre numerose classi che forniscono accesso avanzato al sistema di sicurezza basato su ACL di Windows.
In .NET Framework viene garantito accesso agli ACL per le seguenti risorse:
Chiavi crittografiche
Directory
Handle di attesa evento
File
Mutex
Chiavi del Registro di sistema
Semafori
Per ciascuna di tali risorse sono disponibili diverse classi utilizzabili per creare e modificare gli ACL.
Gerarchia delle classi degli ACL
Nella maggior parte degli scenari è possibile utilizzare le classi astratte di livello superiore, anziché quelle avanzate, per creare e modificare ACL. Per ciascuna risorsa il formato delle classi di livello superiore è simile al seguente:
Una classe che incapsula l'elenco di controllo di accesso discrezionale (DACL) e l'elenco di controllo di accesso di sistema (SACL). Il nome di questa classe è <Nome risorsa>Security. Ad esempio, le classi FileSecurity e DirectorySecurity incapsulano DACL e SACL per file e cartelle.
Una classe che incapsula una voce di controllo di accesso (ACE). Il nome di questa classe è <Nome risorsa>AccessRule.
Una classe che incapsula una voce di controllo di accesso (ACE) di controllo. Il nome di questa classe è <Nome risorsa>AuditRule.
Diverse enumerazioni che consentono di creare regole specifiche di accesso e controllo.
Per un elenco completo di tutte le classi di ACL di livello elevato, vedere Riepilogo della tecnologia per gli ACL.
Aggiunta di ACE agli ACL
Dopo aver creato una ACE utilizzando una delle classi per le regole di accesso o di controllo, è possibile aggiungere la regola a una risorsa oppure utilizzarla per rimuovere una regola esistente da una risorsa. È ad esempio possibile creare una regola tramite la classe FileSystemAccessRule specificando che un file può essere aperto solo dall'amministratore. È quindi possibile aggiungere tale regola a un oggetto FileSecurity oppure rimuovere una regola simile da un oggetto FileSecurity.
L'aggiunta di una ACE che concede l'accesso non implica la concessione dell'accesso a un oggetto Principal, in quanto una regola di negazione ha sempre la precedenza su una regola di concessione. Se ad esempio si aggiunge a un file una regola di concessione dell'accesso per un account di sistema, è possibile che quest'ultimo non possa comunque accedere al file in virtù di una regola che nega tale accesso.
Ciascun oggetto <Nome risorsa>Security associato a una risorsa fornisce i seguenti metodi per l'aggiunta o la rimozione di regole di accesso e di controllo.
Metodo |
Descrizione |
---|---|
AddAccessRule - e - AddAuditRule |
Cerca una regola di accesso o di controllo che è possibile unire alla nuova regola. Se non viene trovata alcuna regola, viene aggiunta la nuova regola. |
SetAccessRule |
Rimuove tutte le regole di controllo di accesso in cui l'utente e il valore di AccessControlType (Allow o Deny) siano identici a quelli della regola specificata, quindi aggiunge la regola specificata. |
SetAuditRule |
Rimuove tutte le regole di controllo in cui l'utente sia identico a quello della regola specificata, indipendentemente dal valore di AuditFlags, quindi aggiunge la regola specificata. |
ResetAccessRule |
Rimuove tutte le regole di controllo di accesso in cui l'utente sia identico a quello della regola specificata, indipendentemente dal valore di AccessControlType, quindi aggiunge la regola specificata. |
RemoveAccessRule |
Cerca una regola di controllo di accesso in cui l'utente e il valore di AccessControlType (Allow o Deny) siano identici a quelli della regola specificata e che presenti flag di ereditarietà e propagazione compatibili. Se la regola viene trovata, i diritti contenuti nella regola di accesso specificata vengono rimossi. |
RemoveAuditRule |
Cerca una regola di controllo di accesso in cui l'utente sia identico a quello della regola specificata e che presenti flag di ereditarietà e propagazione compatibili. Se la regola viene trovata, i diritti contenuti nella regola specificata vengono rimossi. |
RemoveAccessRuleAll |
Cerca tutte le regole di accesso in cui l'utente e il valore di AccessControlType (Allow o Deny) siano identici a quelli della regola specificata e rimuove le regole trovate. |
RemoveAuditRuleAll |
Cerca tutte le regole di controllo in cui l'utente sia identico a quello della regola specificata e rimuove le regole trovate. |
RemoveAccessRuleSpecific - e - RemoveAuditRuleSpecific |
Cerca una regola di accesso o di controllo che corrisponde esattamente alla regola specificata e rimuove la regola trovata. |
AddAccessRule - e - AddAuditRule |
Cerca una regola di accesso o di controllo che è possibile unire alla nuova regola. Se non viene trovata alcuna regola, viene aggiunta la nuova regola. |
Ottenere e impostare gli ACL
Per ciascuna risorsa protetta sono disponibili metodi che consentono di ottenere e impostare l'oggetto <Nome risorsa>Security associato a una risorsa. Per recuperare gli ACL esistenti per una risorsa specifica, utilizzare uno dei metodi GetAccessControl associati alla risorsa. Per propagare nuovamente le modifiche in una risorsa, utilizzare uno dei metodi SetAccesscontrol associati alla risorsa. Si noti che le modifiche non vengono nuovamente propagate in una risorsa finché non vengono riapplicate in modo esplicito con uno dei metodi set.
Per un elenco completo di tutti i metodi get e set disponibili per ciascuna risorsa protetta, vedere Riepilogo della tecnologia per gli ACL.