Share via


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 inserire i metodi sugli oggetti che contengono il nuovo ace e il metodo IADs.SetInfo devono essere chiamati per scrivere il descrittore di sicurezza aggiornato nella directory dalla cache delle proprietà.

Per altre informazioni e un esempio di codice che imposta un ace su un oggetto in Dominio di Active Directory Services, vedere Codice di esempio per l'impostazione di un ace in un oggetto directory.

Usare il processo generale seguente per creare un ace per un diritto di accesso e impostare l'ace sull'elenco DACL di un oggetto.

  1. Ottenere un puntatore all'interfaccia IAD all'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 VARIANT contenente un puntatore IDispatch (il membro vt è VT_DISPATCH). Chiamare QueryInterface sul puntatore IDispatch per ottenere un'interfaccia IADsSecurityDescriptor per usare i metodi su 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 sul puntatore IDispatch per ottenere un'interfaccia IADsAccessControlList per usare i metodi su tale interfaccia per accedere ai singoli ACL.

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

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

    1. Usare IADsAccessControlEntry::p ut_Trustee per impostare il trustee a cui si applica questa 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 i formati seguenti:
      • Account di dominio (nome di accesso usato in una versione precedente di Windows NT) del formato "dominio\account utente" in cui "<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 tutti, sistema locale, entità self, utente autenticato, proprietario creatore 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\<group name>" dove "<nome> 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\Amministrazione istrators".
      • SID (formato stringa) dell'utente specificato, ovvero la proprietà objectSID dell'utente specificato. È possibile convertire in formato stringa usando la funzione ConvertSidToStringSid nella API 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.AceType per specificare se consentire o negare i diritti di accesso impostati da AccessMask. Per i diritti standard, questo 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 Flags è impostato su ADS_FLAG_OBJECT_TYPE_PREedizione Standard NT, 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_PREedizione Standard NT, impostare la proprietà IADsAccessControlEntry.InheritedObjectType per specificare una stringa contenente il GUID della classe oggetto ereditata a cui si applica ACE. Il GUID deve essere specificato come stringa del form prodotto dalla funzione StringFromGUID2 nella libreria COM.
  6. Utilizzare il metodo QueryInterface nell'oggetto IADsAccessControlEntry per ottenere un puntatore IDispatch. Il metodo IADsAccessControlList.AddAce richiede un puntatore dell'interfaccia IDispatch all'ACE.

  7. Usare IADsAccessControlList.AddAce per aggiungere la nuova ace all'elenco DACL. Tenere presente che l'ordine degli ACL 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 Ordine degli ACL in un daCL.

  8. Utilizzare la proprietà IADsSecurityDescriptor.DiscretionaryAcl per scrivere il DACL contenente il nuovo ACE nel descrittore di sicurezza. Per altre informazioni sulle licenze DACL, vedere DACL Null e DACLs 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à nell'oggetto nella directory.