Udostępnij za pośrednictwem


Ustawianie praw dostępu do obiektu

W przypadku używania obiektów COM ADSI IADsSecurityDescriptor (deskryptor zabezpieczeń), IADsAccessControlList (DACLs i SACLs) oraz IADsAccessControlEntry (ACE) w celu dodania ACE do listy ACL, wprowadzane są zmiany w właściwości nTSecurityDescriptor określonego obiektu w pamięci podręcznej właściwości. Oznacza to, że metody umieszczania na obiektach zawierających nową usługę ACE i IADs.SetInfo metody muszą być wywoływane w celu zapisania zaktualizowanego deskryptora zabezpieczeń do katalogu z pamięci podręcznej właściwości.

Aby uzyskać więcej informacji i przykład kodu, który ustawia ACE na obiekcie w usługach Active Directory Domain Services, zobacz Przykładowy kod ustawienia ACE w obiekcie katalogu.

Użyj następującego ogólnego procesu, aby utworzyć ACE dla prawa dostępu i umieścić to ACE w DACL obiektu.

  1. Pobierz wskaźnik do interfejsu IADs dla obiektu.

  2. Użyj metody IADs.Get, aby uzyskać deskryptor zabezpieczeń obiektu. Nazwa właściwości zawierającej deskryptor zabezpieczeń to nTSecurityDescriptor. Właściwość zostanie zwrócona jako VARIANT zawierająca wskaźnik IDispatch (element członkowski vt jest VT_DISPATCH). Wywołaj QueryInterface na wskaźniku IDispatch, aby uzyskać interfejs IADsSecurityDescriptor, i użyć jego metod do uzyskania dostępu do listy kontrolnej dostępu (ACL) deskryptora zabezpieczeń.

  3. Użyj właściwości IADsSecurityDescriptor.DiscretionaryAcl, aby uzyskać DACL. Metoda zwraca wskaźnik IDispatch. Wywołaj QueryInterface na tym wskaźniku IDispatch, aby uzyskać interfejs IADsAccessControlList, aby użyć metod tego interfejsu do uzyskania dostępu do poszczególnych ACE w ACL.

  4. Użyj CoCreateInstance, aby utworzyć obiekt COM ADSI dla nowej ACE i uzyskać wskaźnik interfejsu IADsAccessControlEntry do tego obiektu. Należy pamiętać, że identyfikator klasy jest CLSID_AccessControlEntry.

  5. Ustaw właściwości ACE przy użyciu metod IADsAccessControlEntry:

    1. Użyj IADsAccessControlEntry::put_Trustee, aby ustawić podmiot, do którego ma zastosowanie ten ACE. Powiernik jest użytkownikiem, grupą lub innym podmiotem zabezpieczeń. Aplikacja powinna używać wartości z odpowiedniej właściwości z obiektu użytkownika lub grupy zaufania, do którego chcesz zastosować ACE. Powiernik jest określany jako BSTR i może przyjmować następujące formy:
      • Konto domeny (nazwa logowania używana w poprzedniej wersji systemu Windows NT) w formacie "<domena>\<konto użytkownika>", w którym "<domena>" jest nazwą domeny systemu Windows NT, która zawiera użytkownika, a "<konto użytkownika>" jest właściwością sAMAccountName określonego użytkownika. Na przykład: "fabrikam\jeffsmith".
      • Znany główny podmiot zabezpieczeń, który reprezentuje specjalne tożsamości zdefiniowane przez system zabezpieczeń Windows NT, takie jak wszyscy, system lokalny, podmiot własny, uwierzytelniony użytkownik, twórca właściciel itd. Obiekty reprezentujące dobrze znane podmioty zabezpieczeń są przechowywane w kontenerze Dobrze znane podmioty zabezpieczeń pod kontenerem Konfiguracji. Na przykład logowanie anonimowe.
      • Wbudowana grupa reprezentująca wbudowane grupy użytkowników zdefiniowane przez system zabezpieczeń Windows NT. Ma on postać "BUILTIN\<nazwa grupy>", gdzie "<nazwa grupy>" jest nazwą wbudowanej grupy użytkowników. Obiekty reprezentujące wbudowane grupy są przechowywane w kontenerze Builtin pod kontenerem domeny. Na przykład "BUILTIN\Administrators".
      • Identyfikator SID (format ciągu) określonego użytkownika, który jest właściwością objectSID określonego użytkownika. Możesz przekonwertować na postać ciągu za pomocą funkcji ConvertSidToStringSid w interfejsie API zabezpieczeń Win32. Na przykład: "S-1-5-32-548".
    2. Użyj właściwości IADsAccessControlEntry.AccessMask, aby ustawić maskę określającą prawo dostępu. Wyliczenie ADS_RIGHTS_ENUM określa prawa dostępu, które można ustawić na obiekcie katalogu.
    3. Użyj właściwości IADsAccessControlEntry.AceType, aby określić, czy zezwalać lub odmawiać prawa dostępu ustawione przez AccessMask. W przypadku praw standardowych może to być ADS_ACETYPE_ACCESS_ALLOWED lub ADS_ACETYPE_ACCESS_DENIED. W przypadku praw specyficznych dla obiektu (praw, które mają zastosowanie do określonej części obiektu lub określonego typu obiektu), użyj ADS_ACETYPE_ACCESS_ALLOWED_OBJECT lub ADS_ACETYPE_ACCESS_DENIED_OBJECT. Wyliczenie ADS_ACETYPE_ENUM określa typy dostępu, które można ustawić w ACE.
    4. Użyj właściwości IADsAccessControlEntry.AceFlags, aby określić, czy inne kontenery lub obiekty pod określonym obiektem mogą dziedziczyć ACE. Wyliczenie ADS_ACEFLAG_ENUM określa flagi dziedziczenia, które można ustawić w ACE.
    5. Użyj właściwości IADsAccessControlEntry.Flags, aby określić, czy prawo dotyczy określonej części obiektu, dziedziczonego typu obiektu, czy obu tych elementów.
    6. Jeśli flaga jest ustawiona na ADS_FLAG_OBJECT_TYPE_PRESENT, ustaw właściwość IADsAccessControlEntry.ObjectType, aby określić ciąg zawierający identyfikator GUID klasy obiektu (dla ADS_RIGHT_DS_CREATE_CHILD lub ADS_RIGHT_DS_DELETE_CHILD), właściwość, zestaw właściwości, zweryfikowany zapis lub prawo rozszerzone, do którego odnosi się ACE. Identyfikator GUID musi być określony jako ciąg formularza utworzonego przez funkcję StringFromGUID2 w bibliotece COM.
    7. Jeśli Flags jest ustawiona na ADS_FLAG_INHERITED_OBJECT_TYPE_PRESENT, ustaw właściwość IADsAccessControlEntry.InheritedObjectType, aby określić ciąg zawierający identyfikator GUID dziedziczonej klasy obiektu, do którego ma zastosowanie ACE. Identyfikator GUID musi być określony jako ciąg formularza utworzonego przez funkcję StringFromGUID2 w bibliotece COM.
  6. Użyj metody QueryInterface w obiekcie IADsAccessControlEntry, aby uzyskać wskaźnik IDispatch. Metoda IADsAccessControlList.AddAce wymaga IDispatch wskaźnika interfejsu ACE.

  7. Użyj IADsAccessControlList.AddAce, aby dodać nową ACE do listy DACL. Należy pamiętać, że kolejność kontroli dostępu w ramach listy ACL może mieć wpływ na ocenę dostępu do obiektu. Prawidłowy dostęp do obiektu może wymagać utworzenia nowej listy ACL, dodania wpisów ACE z istniejącej listy ACL w odpowiedniej kolejności do nowej listy ACL, a następnie zastąpienia istniejącej listy ACL w deskryptorze zabezpieczeń nową listą ACL. Aby uzyskać więcej informacji, zobacz Order of ACEs in a DACL.

  8. Użyj właściwości IADsSecurityDescriptor.DiscretionaryAcl, aby zapisać DACL zawierający nowe ACE do deskryptora zabezpieczeń. Aby uzyskać więcej informacji na temat list DACLs, zobacz null DACLs i Empty DACLs.

  9. Użyj metody IADs.Put, aby zapisać deskryptor zabezpieczeń do obiektu nTSecurityDescriptor właściwości w pamięci podręcznej właściwości.

  10. Użyj metody IADs.SetInfo, aby zaktualizować właściwość obiektu w katalogu.