Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Non tutte le attività possono essere eseguite modificando gli attributi di un oggetto. Talvolta è necessario modificare il descrittore di protezione di un oggetto. Ad esempio, per impostazione predefinita, un utente normale può leggere la maggior parte degli attributi ma non può modificarli. È possibile consentire a un utente di leggere e scrivere il proprio numero di telefono. A questo scopo aggiungere un voce di controllo dell'accesso (ACE) all'elenco di controllo dell'accesso discrezionale (DACL) dell'oggetto utente. Questa voce è un'autorizzazione ACE all'accesso in scrittura alla proprietà telephoneNumber. Per ulteriori informazioni sulla proprietà telephoneNumber, vedere l'argomento relativo a telephoneNumber o l'argomento relativo a Telephone-Number in MSDN Library all'indirizzo https://go.microsoft.com/fwlink/?LinkID=27252 (informazioni in lingua inglese).
Nelle versioni 1.0 e 1.1 di .NET Framework non esiste supporto nativo per modificare i descrittori di protezione degli oggetti Active Directory. Il descrittore di protezione di un oggetto Active Directory può essere modificato richiamando ADSI e utilizzando IADsSecurityDescriptor e le interfacce associate. Per ulteriori informazioni, vedere Richiamo di ADSI. Per ulteriori informazioni sull'interfaccia IADsSecurityDescriptor, vedere l'argomento relativo a IADsSecurityDescriptor in MSDN Library all'indirizzo https://go.microsoft.com/fwlink/?LinkID=27252 (informazioni in lingua inglese).
In .NET Framework 2.0, lo spazio dei nomi System.DirectoryServices contiene diverse classi per consentire la modifica di un descrittore di protezione senza dover richiamare ADSI. La classe primaria utilizzata con i descrittori di protezione degli oggetti Active Directory è ActiveDirectorySecurity. È possibile ottenere un oggetto ActiveDirectorySecurity che rappresenta il descrittore di protezione di un oggetto Active Directory con la proprietà ObjectSecurity.
La classe ActiveDirectorySecurity presenta metodi e proprietà che consentono di leggere e modificare l'elenco di controllo dell'accesso discrezionale e l'elenco di controllo dell'accesso secondario di un oggetto.
Una voce di un elenco di controllo dell'accesso discrezionale è detta regola di accesso. La classe primaria che rappresenta una regola di accesso è la classe ActiveDirectoryAccessRule. Esistono anche diverse classi che derivano dalla classe ActiveDirectoryAccessRule e vengono utilizzate per rappresentare tipi specifici di regole di accesso. Nella tabella seguente sono riportate queste classi specifiche e il loro utilizzo.
| Classe | Utilizzo |
|---|---|
Rappresenta una regola di accesso utilizzata per concedere o negare a un oggetto Active Directory il diritto di creare oggetti figlio. |
|
Rappresenta una regola di accesso utilizzata per concedere o negare a un oggetto Active Directory il diritto di eliminare oggetti figlio. |
|
Rappresenta una regola di accesso utilizzata per concedere o negare a un oggetto Active Directory il diritto di eliminare tutti gli oggetti figlio. |
|
Rappresenta una regola di accesso utilizzata per concedere o negare a un oggetto Active Directory un diritto esteso. |
|
Rappresenta una regola di accesso utilizzata per concedere o negare a un oggetto Active Directory il diritto di elencare oggetti figlio. |
|
Rappresenta una regola di accesso utilizzata per concedere o negare l'accesso a una proprietà Active Directory. |
|
Rappresenta una regola di accesso utilizzata per concedere o negare l'accesso a un insieme di proprietà Active Directory. |
Una voce in un elenco di controllo dell'accesso di sistema è detta regola di controllo ed è rappresentata dalla classe ActiveDirectoryAuditRule.
In molti casi non conviene aggiungere una regola di accesso a ogni singolo oggetto per concedere o negare l'accesso a qualche elemento. In questi casi è preferibile modificare il descrittore di protezione del contenitore e rendere ereditabile la regola di accesso. In questo modo inoltre si garantisce che al momento della creazione di nuovi oggetti, questi riceveranno le autorizzazioni appropriate. Nell'esempio relativo alla proprietà telephoneNumber sopra riportato, è possibile concedere agli utenti l'accesso in scrittura al loro numero di telefono. Il modo più semplice per ottenre ciò è aggiungere una regola di accesso ereditabile a un contenitore, come un'unità organizzativa, e inserire tutti gli utenti nell'unità. Negli esempi di codice riportati di seguito viene illustrato come eseguire questa operazione.
Esempio
Nell'esempio di codice Visual Basic .NET riportato di seguito viene illustrato come aggiungere una regola di accesso a un contenitore che concederà a tutti i figli del contenitore che sono oggetti utente l'accesso in scrittura alla proprietà telephoneNumber. Per ulteriori informazioni sulla proprietà telephoneNumber, vedere l'argomento relativo a telephoneNumber o l'argomento relativo a Telephone-Number in MSDN Library all'indirizzo https://go.microsoft.com/fwlink/?LinkID=27252 (informazioni in lingua inglese).
Sub SetWritePhonePermission(ByVal container As DirectoryEntry)
Try
' Get the ActiveDirectorySecurity for the container.
Dim containerSecurity As ActiveDirectorySecurity
containerSecurity = container.ObjectSecurity
' Create a SecurityIdentifier object for "self".
Dim selfSid As New SecurityIdentifier(WellKnownSidType.SelfSid, _
Nothing)
' Get the schema for the currently logged on user.
Dim schema As ActiveDirectorySchema
schema = ActiveDirectorySchema.GetCurrentSchema()
' Get the telephoneNumber schema property object.
Dim phoneProperty As ActiveDirectorySchemaProperty
phoneProperty = schema.FindProperty("telephoneNumber")
' Get the user schema class object.
Dim userClass As ActiveDirectorySchemaClass
userClass = schema.FindClass("user")
' Create a property access rule to allow a user to write to their own telephoneNumber property.
Dim allowWritePhoneRule As New PropertyAccessRule(selfSid, _
AccessControlType.Allow, _
PropertyAccess.Write, _
phoneProperty.SchemaGuid, _
ActiveDirectorySecurityInheritance.Descendents, _
userClass.SchemaGuid)
' Add the access rule to the DACL.
container.ObjectSecurity.AddAccessRule(allowWritePhoneRule)
' Commit the changes.
container.CommitChanges()
Catch notFoundEx As ActiveDirectoryObjectNotFoundException
' The schema class or property could not be found.
End Try
End Sub 'SetWritePhonePermission
Nell'esempio di codice C# riportato di seguito viene illustrato come aggiungere una regola di accesso a un contenitore che concederà a tutti i figli del contenitore che sono oggetti utente l'accesso in scrittura alla proprietà telephoneNumber. Per ulteriori informazioni sulla proprietà telephoneNumber, vedere l'argomento relativo a telephoneNumber o l'argomento relativo a Telephone-Number in MSDN Library all'indirizzo https://go.microsoft.com/fwlink/?LinkID=27252 (informazioni in lingua inglese).
static void SetWritePhonePermission(DirectoryEntry container)
{
try
{
// Get the ActiveDirectorySecurity for the container.
ActiveDirectorySecurity containerSecurity = container.ObjectSecurity;
// Create a SecurityIdentifier object for "self".
SecurityIdentifier selfSid =
new SecurityIdentifier(WellKnownSidType.SelfSid, null);
// Get the schema for the currently logged on user.
ActiveDirectorySchema schema = ActiveDirectorySchema.GetCurrentSchema();
// Get the telephoneNumber schema property object.
ActiveDirectorySchemaProperty phoneProperty = schema.FindProperty("telephoneNumber");
// Get the user schema class object.
ActiveDirectorySchemaClass userClass = schema.FindClass("user");
// Create a property access rule to allow a user to write to their own telephoneNumber property.
PropertyAccessRule allowWritePhoneRule =
new PropertyAccessRule(
selfSid,
AccessControlType.Allow,
PropertyAccess.Write,
phoneProperty.SchemaGuid,
ActiveDirectorySecurityInheritance.Descendents,
userClass.SchemaGuid);
// Add the access rule to the DACL.
container.ObjectSecurity.AddAccessRule(allowWritePhoneRule);
// Commit the changes.
container.CommitChanges();
}
catch (ActiveDirectoryObjectNotFoundException)
{
// The schema class or property could not be found.
}
}
Vedere anche
Riferimenti
System.DirectoryServices
ActiveDirectorySecurity
ActiveDirectoryAccessRule
ActiveDirectoryAuditRule
Concetti
Attività di amministrazione del sistema
Send comments about this topic to Microsoft.
Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.