Condividi tramite


Impostazione dei diritti di accesso per un oggetto

Quando si usano gli oggetti COM ADSI IADsSecurityDescriptor (descrittore di sicurezza), IADsAccessControlList (DACL e SACLs) e IADsAccessControlEntry (ACE) per aggiungere un ACE a un ACL, si apportano modifiche alla proprietà nTSecurityDescriptor dell'oggetto specificato nella cache delle proprietà. Ciò significa che è necessario mettere i metodi sugli oggetti che contengono il nuovo ACE e chiamare il metodo IADs.SetInfo per scrivere il descrittore di sicurezza aggiornato nella directory dalla cache delle proprietà.

Per ulteriori informazioni e un esempio di codice che imposta un ACE su un oggetto nei Servizi di dominio di Active Directory, vedere Esempio di codice per l'impostazione di un ACE su un oggetto di directory.

Usare il processo generale seguente per creare un ACE per un diritto di accesso e impostare l'ACE sulla DACL di un oggetto.

  1. Ottenere un puntatore all'interfaccia IADs dell'oggetto.

  2. Usare il metodo IADs.Get per ottenere il descrittore di sicurezza dell'oggetto. Il nome della proprietà contenente il descrittore di sicurezza è nTSecurityDescriptor. La proprietà verrà restituita come un VARIANT contenente un puntatore IDispatch (il membro vt è VT_DISPATCH). Chiamare QueryInterface su quel puntatore IDispatch per ottenere un'interfaccia IADsSecurityDescriptor e utilizzare i metodi di tale interfaccia per accedere all'ACL del descrittore di sicurezza.

  3. Usare la proprietà IADsSecurityDescriptor.DiscretionaryAcl per ottenere l'elenco DACL. Il metodo restituisce un puntatore IDispatch . Chiamare QueryInterface su quel puntatore IDispatch per ottenere un'interfaccia IADsAccessControlList e utilizzare i metodi su tale interfaccia per accedere ai singoli ACE nella ACL.

  4. Usare CoCreateInstance per creare l'oggetto COM ADSI per il nuovo ACE e ottenere un puntatore all'interfaccia IADsAccessControlEntry di tale oggetto. Tenere presente che l'ID classe è CLSID_AccessControlEntry.

  5. Impostare le proprietà di ACE usando i metodi IADsAccessControlEntry:

    1. Usare IADsAccessControlEntry::put_Trustee per impostare il trustee a cui si applica questo ACE. Il trustee è un utente, un gruppo o un'altra entità di sicurezza. L'Applicazione deve usare il valore della proprietà appropriata dall'oggetto utente o gruppo del trustee a cui si desidera applicare l'ACE. Il trustee viene specificato come BSTR e può assumere le forme seguenti:
      • Account di dominio (nome di accesso usato in una versione precedente di Windows NT) del formato "<dominio>\<account utente>" dove "<dominio>" è il nome del dominio Windows NT che contiene l'utente e "<account utente>" è la proprietà sAMAccountName dell'utente specificato. Ad esempio: "fabrikam\jeffsmith".
      • Entità di sicurezza nota che rappresenta identità speciali definite dal sistema di sicurezza di Windows NT, ad esempio chiunque, sistema locale, entità propria, utente autenticato, creatore originale e così via. Gli oggetti che rappresentano le entità di sicurezza note vengono archiviati nel contenitore Entità di sicurezza note sotto il contenitore Configuration. Ad esempio, accesso anonimo.
      • Gruppo predefinito che rappresenta i gruppi di utenti predefiniti definiti dal sistema di sicurezza di Windows NT. Ha il formato "BUILTIN\<nome del gruppo>" dove "<nome del gruppo>" è il nome del gruppo di utenti predefinito. Gli oggetti che rappresentano i gruppi predefiniti vengono archiviati nel contenitore Builtin sotto il contenitore di dominio. Ad esempio, "BUILTIN\Administrators".
      • SID (formato stringa) dell'utente specificato, ovvero la proprietà objectSID dell'utente specificato. È possibile convertire in formato stringa usando la funzioneConvertSidToStringSidnell'API di sicurezza Win32. Ad esempio: "S-1-5-32-548".
    2. Utilizzare la proprietà IADsAccessControlEntry.AccessMask per impostare la maschera che specifica il diritto di accesso. L'enumerazione ADS_RIGHTS_ENUM specifica i diritti di accesso che è possibile impostare su un oggetto directory.
    3. Utilizzare la proprietàIADsAccessControlEntry.AceTypeper specificare se consentire o negare i diritti di accesso impostati da AccessMask. Nel caso dei diritti standard, può essere ADS_ACETYPE_ACCESS_ALLOWED o ADS_ACETYPE_ACCESS_DENIED. Per i diritti specifici dell'oggetto (diritti applicabili a una parte specifica di un oggetto o a un tipo specifico di oggetto), utilizzare ADS_ACETYPE_ACCESS_ALLOWED_OBJECT o ADS_ACETYPE_ACCESS_DENIED_OBJECT. L'enumerazione ADS_ACETYPE_ENUM specifica i tipi di accesso che è possibile impostare su un ace.
    4. Utilizzare la proprietà IADsAccessControlEntry.AceFlags per specificare se altri contenitori o oggetti sotto l'oggetto specificato possono ereditare l'ACE. L'enumerazione ADS_ACEFLAG_ENUM specifica i flag di ereditarietà che è possibile impostare su un ace.
    5. Utilizzare la proprietà IADsAccessControlEntry.Flags per specificare se il diritto si applica a una parte specifica dell'oggetto, a un tipo di oggetto ereditato o a entrambi.
    6. Se flag è impostato su ADS_FLAG_OBJECT_TYPE_PRESENT, impostare la proprietà IADsAccessControlEntry.ObjectType o specificare una stringa contenente il GUID della classe oggetto (per ADS_RIGHT_DS_CREATE_CHILD o ADS_RIGHT_DS_DELETE_CHILD), proprietà, set di proprietà, scrittura convalidata o diritto esteso a cui si applica l'ACE. Il GUID deve essere specificato come stringa del form prodotto dalla funzione StringFromGUID2 nella libreria COM.
    7. Se Flags è impostato su ADS_FLAG_INHERITED_OBJECT_TYPE_PRESENT, impostare la proprietà IADsAccessControlEntry.InheritedObjectType per specificare una stringa contenente il GUID della classe oggetto ereditata a cui si applica l'ACE. Il GUID deve essere specificato come stringa del form prodotto dalla funzione StringFromGUID2 nella libreria COM.
  6. Utilizzare il metodo QueryInterface sull'oggetto IADsAccessControlEntry per ottenere un puntatore IDispatch. Il metodo IADsAccessControlList.AddAce richiede un puntatore all'interfaccia IDispatch all'ACE.

  7. Usare IADsAccessControlList.AddAce per aggiungere la nuova ACE all'elenco DACL. Tenere presente che l'ordine delle ACE all'interno dell'ACL può influire sulla valutazione dell'accesso all'oggetto. L'accesso corretto all'oggetto potrebbe richiedere di creare un nuovo ACL, aggiungere gli ACL dall'ACL esistente nell'ordine corretto al nuovo ACL e quindi sostituire l'ACL esistente nel descrittore di sicurezza con il nuovo ACL. Per altre informazioni, vedere Order of ACEs in a DACL.

  8. Utilizzare la proprietà IADsSecurityDescriptor.DiscretionaryAcl per scrivere l'elenco di controllo di accesso discrezionale contenente il nuovo ACE nel descrittore di sicurezza. Per ulteriori informazioni sui DACL, vedere DACL Nulli e DACL Vuoti.

  9. Utilizzare il metodo IADs.Put per scrivere il descrittore di sicurezza nella proprietà nTSecurityDescriptor dell'oggetto nella cache delle proprietà.

  10. Utilizzare il metodo IADs.SetInfo per aggiornare la proprietà dell'oggetto nella directory.