В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету

Как правильно упорядочить записи управления доступом в список управления Доступом с помощью Visual Basic и ADsSecurity.dll

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

Эта статья на английском языке:269159
Заявление об отказе относительно содержимого статьи о продуктах, поддержка которых прекращена
Эта статья содержит сведения о продуктах, поддержка которых корпорацией Майкрософт прекращена. Поэтому она предлагается как есть и обновляться не будет.
Аннотация
В этой статье показано, как использовать ADsSecurity.dll для получения дескриптора безопасности (SD) для файла, объект Active Directory или реестра. В этой статье показано, как это сделать, после получения SD, извлечь из этого SD список управления доступом (ACL), а затем добавить записи управления доступом (ACE) в правильное расположение. В статье приводятся простой алгоритм вместе с Microsoft Visual Basic пример кода, иллюстрирующий способ правильно упорядочить список управления Доступом, затем записи ACL обратно SD.
Дополнительная информация
Метод IADsAccessControlList::AddAce добавляет элемент управления ДОСТУПОМ в верхней части списка управления Доступом. В некоторых случаях Добавление записи управления ДОСТУПОМ в верхней создаст нежелательный доступ. Кэш свойств интерфейсы служб Active Directory (ADSI) для Microsoft Windows Server 2003 и Microsoft Windows XP будет правильно заказа DACL перед записью его к объекту. Изменение порядка необходимо только в Microsoft Windows 2000. Правильный порядок записей ACE в ACL выглядит следующим образом:
Отказано записи ACE, которые применяются к объектам.
Отказано ACE, применимых для дочернего объекта, такие как набор свойств или свойств
Доступ разрешен записи ACE, которые применяются к объектам.
Доступ разрешен ACE, применимых для дочернего объекта, такие как набор свойств или свойств
В продуктах, перечисленных в этой статье интерфейс IADsAccessControlList не поддерживает метод, который правильно упорядочивает список управления Доступом. Записи ACE должны быть отсортированы в этих пяти групп:
Отказано в объекте
Отказано в дочерние или свойство
Разрешен доступ на объект
Разрешен доступ на дочерних или свойство
Все наследуемые записи ACE
Упорядочение наследуемые ACE не должна изменяться. Все наследуемые записи ACE, добавляются в операционной системе и упорядочиваются соответствующим образом. Программист можно указать, что следует наследуемые ACE и Windows 2000 или Windows NT позаботится распространение записи управления ДОСТУПОМ на дочерние объекты.

Существует одно исключение для правила распространения. Записи ACE, добавляются в список управления доступом для объекта, будут автоматически применение существующих объектов в дереве. Он отвечает программист пройти по дереву и распространять элемент управления ДОСТУПОМ путем добавления элемента управления ДОСТУПОМ для существующих объектов. ACE распространяется на новые объекты в поддереве.

Алгоритм сортировки записей ACE в список управления Доступом

  1. Получите дискреционный список управления Доступом (DACL) в дескрипторе безопасности.
  2. Проверьте, IADsAccessControlEntry::AceFlags ли было ACE наследуются (проверка ADS_ACEFLAG_INHERITED_ACE бит).
  3. Проверка IADsAccessControlEntry::AceType, чтобы увидеть, какой тип ACE дает доступ и права доступа, предоставляемого (самого объекта или свойства объекта). Ниже приведены значения типа управления ДОСТУПОМ и что они означают:
    ADS_ACETYPE_ACCESS_ALLOWED - предоставляет доступ к всему объекту
    ADS_ACETYPE_ACCESS_ALLOWED_OBJECT - указывает, доступ к свойству или набор свойств
    ADS_ACETYPE_ACCESS_DENIED - запрещает доступ к всему объекту
    ADS_ACETYPE_ACCESS_DENIED_OBJECT - запретить доступ к свойству или набор свойств.
  4. Поместите элемент управления ДОСТУПОМ в соответствующий временный список DACL, исходя из значения IADsAccessControlListEntry::AceType.
  5. Перестройте список управления Доступом из отдельных списков ACL в следующем порядке:
    Типы ADS_ACETYPE_ACCESS_DENIED ACE
    Типы ADS_ACETYPE_ACCESS_DENIED_OBJECT ACE
    Типы ADS_ACETYPE_ACCESS_ALLOWED ACE
    Типы ADS_ACETYPE_ACCESS_ALLOWED_OBJECT ACE
    Набор записей ACE с флагом ADS_ACEFLAG_INHERITED_ACE в IADsAccessControlListEntry::AceFlags
  6. Задайте новые ACL уровни редакции старый список управления Доступом.
  7. Замените список ACL в дескриптор безопасности.

Действия для использования кода Visual Basic, описанное в данной статье

  1. Зарегистрируйте ADsSecurity.dll.

    ADsSecurity.dll является частью служб Active Directory интерфейсы (ADSI) 2.5 Resource Kit. Чтобы загрузить ADSI 2.5 Resource kit, посетите веб-узел корпорации Майкрософт: Для регистрации ADsSecurity.dll с помощью Regsvr32. Эта библиотека DLL не регистрируется правильно, это указывает, ADSI не установлен. Если код выполняется на компьютере под управлением Microsoft Windows NT или на компьютере под управлением Microsoft Windows 98, установите соответствующие клиентского расширения Active Directory. Для получения дополнительных сведений о получении этих клиентов см. раздел «Ссылки».
  2. Для запуска Visual Basic. Затем создайте проект EXE.
  3. Представление Ссылки для проекта. Убедитесь, что выбраны следующие:
    • Активные библиотеки типов DS
    • Библиотека типов ADsSecurity 2.5
  4. Создать кнопку на форму.
  5. Дважды щелкните кнопку команды. Вставьте следующий код в Command1_Click обработчик команд.

Образец кода Visual Basic показано, как реализовать алгоритм сортировки

Dim sec As New ADsSecurityDim sd As IADsSecurityDescriptorDim dacl As IADsAccessControlListDim ace As IADsAccessControlEntryDim newAce As New AccessControlEntry'' Declare temporary ACLs for sorting the original' ACL'Dim newdacl As New AccessControlListDim ImpDenyDacl As New AccessControlListDim ImpDenyObjectDacl As New AccessControlListDim InheritedDacl As New AccessControlListDim ImpAllowDacl As New AccessControlListDim impAllowObjectDacl As New AccessControlListPrivate Sub Command1_Click()'' Be sure to register ADsSecurity.Dll using RegSvr32 and' adding the ADsSecurity2.5 Type Library to you references for' the project.'' Using the ADsSecurity object, retrieve a SD for an object.  Just' Replace the LDAP:// path with the path of an object that contains a' SD.  For additional details on valid path strings, review' the information stored in the Platform SDK ADSI samples starting with' "<Platform SDK Root>\Samples\NetDs\ADSI\rtk.htm"'Set sec = CreateObject("ADsSecurity")<BR/>' TODO :  replace the servername and DN of the object you want to modify.Set sd = sec.GetSecurityDescriptor("LDAP://MyDCname/cn=MyUser,cn=Users,dc=MyDom,dc=com")'Displaying the ACE in the DACL --- it's the same way you display ACEs for File, File Share, Registry, Exchange, and Active Directory's ACL.Set dacl = sd.DiscretionaryAclDebug.Print Date & Time & "Initial Values of DACL"For Each ace In dacl   Debug.Print ace.Trustee   Debug.Print Hex(ace.AccessMask)   Debug.Print Hex(ace.AceType)   Debug.Print Hex(ace.AceFlags)   Debug.Print Hex(ace.Flags)NextDebug.Print dacl.AceCount'' Initialize all of the new ACLs'' If you are doing this in VBSscript you will need to use' The following methods of creating the ACL bins instead of' using the Dim As New statements above. ''Set newAce = CreateObject("AccessControlEntry")'Set newdacl = CreateObject("AccessControlList")'Set InheritedDacl = CreateObject("AccessControlList")'Set ImpAllowDacl = CreateObject("AccessControlList")'Set InhAllowDacl = CreateObject("AccessControlList")'Set ImpDenyObjectDacl = CreateObject("AccessControlList")'Set ImpAllowObjectDacl = CreateObject("AccessControlList")''' Create a new ace, this one' sets an extended right on the user object that allows the' trustee to read and write the userAccountControl property of an' user object.'' TODO : Replace the trustee with an appropriate trustee on the domain' in question.'newAce.Trustee = "MyDomain\Myuser"newAce.Flags = ADS_FLAG_OBJECT_TYPE_PRESENTnewAce.ObjectType = "{BF967A68-0DE6-11D0-A285-00AA003049E2}"newAce.AccessMask = ADS_RIGHT_DS_READ_PROP Or ADS_RIGHT_DS_WRITE_PROPnewAce.AceType = ADS_ACETYPE_ACCESS_ALLOWED_OBJECTnewAce.AceFlags = ADS_ACEFLAG_INHERIT_ACE'' Place the new ace in the DACL'dacl.AddAce newAce'' Sift the DACL into 5 bins:' Inherited Aces' Implicit Deny Aces' Implicit Deny Object Aces' Implicit Allow Aces' Implicit Allow object aces'For Each ace In dacl  '  ' Sort the original ACEs into their appropriate  ' ACLs  '  Debug.Print ace.Trustee  If ((ace.AceFlags And ADS_ACEFLAG_INHERITED_ACE) = ADS_ACEFLAG_INHERITED_ACE) Then     '     ' Do not really care about the order of inherited aces. Since we are     ' adding them to the top of a new list, when they are added back     ' to the Dacl for the object, they will be in the same order as     ' they were originally. Just a positive side effect of adding items     ' of a LIFO (Last In First Out) type list.     '     InheritedDacl.AddAce ace  Else     '     ' We have an Implicit ACE, let's put it the proper pool     '     Select Case ace.AceType     Case ADS_ACETYPE_ACCESS_ALLOWED        '        ' We have an implicit allow ace        '        ImpAllowDacl.AddAce ace     Case ADS_ACETYPE_ACCESS_DENIED        '        ' We have an implicit Deny ACE        '        ImpDenyDacl.AddAce ace     Case ADS_ACETYPE_ACCESS_ALLOWED_OBJECT        '        ' We have an object allowed ace        ' Does it apply to a property? or an Object?        '        impAllowObjectDacl.AddAce ace     Case ADS_ACETYPE_ACCESS_DENIED_OBJECT        '        ' We have an object Deny ace        '        ImpDenyObjectDacl.AddAce ace     Case Else        '        ' Missed a bin?        '        Debug.Print "Bad ace...." & Hex(ace.AceType)     End Select  End IfNext'' Combine the ACEs in the proper order' Implicit Deny' Implicit Deny Object' Implicit Allow' Implicit Allow Object' Inherited aces'' Implicit Deny'For Each ace In ImpDenyDacl  newdacl.AddAce aceNext'' Implicit Deny Object'For Each ace In ImpDenyObjectDacl  newdacl.AddAce aceNext'' Implicit Allow'For Each ace In ImpAllowDacl  newdacl.AddAce aceNext'' Implicit Allow Object'For Each ace In impAllowObjectDacl  newdacl.AddAce aceNext'' Inherited Aces'For Each ace In InheritedDacl  newdacl.AddAce aceNextsd.DiscretionaryAcl = newdaclDebug.Print DateFor Each ace In newdacl   Debug.Print ace.Trustee   Debug.Print "Ace Mask: " & Hex(ace.AccessMask)   Debug.Print "Ace Type: " & Hex(ace.AceType)   Debug.Print "Ace Flags: " & Hex(ace.AceFlags)   Debug.Print "Object Type value: " & Hex(ace.Flags)   Debug.Print "Object Guid : " & ace.ObjectTypeNext'' Set the appropriate revision level' for the DACL'newdacl.AclRevision = dacl.AclRevision'' Replace the Security Descriptor'sec.SetSecurityDescriptor sd' If this generates the error -214023559 or 80070539 check your TODO' strings.  This error is most likely a problem with DNS name resolution.				
Ссылки
Для получения дополнительных сведений щелкните следующие номера статей базы знаний Майкрософт:
269175Как правильно упорядочить записи управления доступом в список управления Доступом с помощью Visual C++
279682 Как использовать ADsSecurity.dll для добавления записи управления доступом к папке NTFS
Для получения дополнительных сведений об установке клиентского расширения Active Directory щелкните следующий номер статьи базы знаний Майкрософт:
288358Инструкции по установке клиентского расширения Active Directory

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 269159 — последний просмотр: 06/05/2011 17:30:00 — редакция: 5.0

  • kbdswadsi2003swept kbhowto kbmt KB269159 KbMtru
Отзывы и предложения