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

Браузер не поддерживается

Чтобы использовать веб-сайт, обновите браузер.

Обновите браузер до последней версии Internet Explorer

Использование собственных компонентов ADSI найдите основной группы

Поддержка Windows Server 2003 завершилась 14 июля 2015 г.

Корпорация Майкрософт завершила поддержку Windows Server 2003 14 июля 2015 г. Это повлияло на обновления программного обеспечения и параметры безопасности. Узнайте, что это значит для вас и какие меры по безопасности можно предпринять.

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

Эта статья на английском языке:321360
Аннотация
В этой статье объясняется, как использовать собственные компоненты интерфейса служб Active Directory (ADSI) для определения членства основной группы пользователя.
Дополнительная информация

Как основной группы хранится в объекте пользователя в Active Directory

Каждый контекст безопасности объекта (например, пользователей и групп безопасности) в Active Directory имеет атрибут идентификатор безопасности, связанные с ним. SID имеет несколько компонентов, как описано в справочнике «Компоненты SID», содержатся в разделе «Ссылки» данной статьи. Два из этих компонентов на SID, домен относительных идентификаторов (RID) и RID определенного объекта в пределах домена.

Основная группа пользователя хранится на (как группы RID в домене пользователя) PrimaryGroupID атрибут объекта пользователя. Основная группа может быть только группу, которая существует в том же домене, что и пользователь, и эта группа должна быть группа, членом которых является пользователь. Кроме того это Группа объект в Active Directory имеет атрибут, именуемый PrimaryGroupToken, хранящий RID для этой группы в пределах домена.

Поставщики Windows NT и протокола LDAP (Lightweight Directory Access Protocol) позволяет программистам Изменение основной группы пользователя, установив PrimaryGroupID значение атрибута RID группы, членом которых является пользователь. Если пользователь не является членом группы, пользователь PrimaryGroupID не может быть присвоено значение RID группы.

Когда используется поставщик Windows NT в ADSI, основная группа включается как вход пользователя IADsUser::Groups Коллекция.

С помощью поставщика LDAP — это основная группа не включены как запись в IADsUser::Groups коллекции, и не является частью различающееся имя (DN) группы Член групп атрибут объекта пользователя в каталоге. Группа RID в PrimaryGroupID Это единственное место, в котором основной группы пользователя ссылается на объект пользователя LDAP.

Ни один поставщик определяет механизм, позволяющий определить имя основной группы пользователя непосредственно из своих соответствующих пользовательских объектов. Проблема становится еще более сложные фактом каждого объекта группы для каждого поставщика поддерживает другой набор атрибутов, как показано ниже:
  • Объект группы, предоставляемые Windows NT не поддерживает PrimaryGroupToken атрибут, а также поддержка поставщиков Windows NT выполняет ли другие способы извлечения группы по ИЗБАВИТЬСЯ с помощью собственного кода ADSI.
  • В PrimaryGroupToken атрибут объекта группы поставщика LDAP — это вычисляемый атрибут. Этот атрибут не существует в каталоге объекта группы. Атрибут по сути, создается при запросе клиентом с IADs::GetInfoEx вызов метода. Не выполнять поиск LDAP на основе атрибутов, построенного в Active Directory. Таким образом, нельзя провести поиск с помощью поставщика LDAP для группы на основе PrimaryGroupToken атрибут, который соответствует PrimaryGroupID атрибут объекта пользователя, основную группу которого нужно определить. Это также правила чисто ADSI решение, которое не зависит от внешних COM-объект для определения основной группы.

Способы определения основной группы пользователя

Ниже приведены три известные методы, чтобы определить имя основной группы пользователя.
  • Построить ИД безопасности строка для элемента RID группы объектов в Active Directory из компонента RID домена SID пользователя и группы на PrimaryGroupID атрибут объекта пользователя.

    Это метод, описанный в статье базы Знаний Майкрософт Q297951 (содержатся в разделе «Ссылки» данной статьи). Основная проблема этого метода — что построить строку привязки SID, программист должен полагаться на ADsSID объект для преобразования в SDDL-форма двоичный дескриптор безопасности объекта домена. В ADsSID объект размещается файл ADsSecurity.dll, который необходимо скопировать и зарегистрированных со стороны клиента до успешного запуска кода.
  • Используйте запрос LDAP для поиска всех групп в домене и возврат их PrimaryGroupToken атрибут.

    Этот метод является чистым решением LDAP. Тем не менее сценарию решения не очень эффективен, поскольку этот поиск возвращает все группы в домене, даже те, которые пользователь не является членом коллекции; а поскольку PrimaryGroupToken атрибут создается на стороне клиента, как обход набора записей, поиск довольно долгое время. Этот метод может быть особенно много времени при наличии большого числа групп в домене. Существует множество примеров создания диалектом LDAP запросов ADO и поэтому они не включаются в этой статье.
  • Воспользоваться преимуществами функций каждого поставщика для создания комбинированного решения.

    Это решение позволяет пользоваться преимуществами возможностей различных поставщиков для определения основной группы пользователя. Чтобы сделать это, выполните следующие действия.
    1. Выполнить привязку к объекту пользователя с поставщиком Windows NT.

      Объект пользователя Windows NT содержит группы, гарантированно содержит основной группы пользователя. Кроме того PrimaryGroupID пользователя хранится объект сразу во временном местоположении во время этого алгоритма.
    2. Перечислить IADsUser::Groups Коллекция.
    3. Извлечь SamAccountName Свойство ADsPath для каждой группы в этой коллекции, а затем построить строку запроса диалекта LDAP для поиска всех групп с SamAccountName свойства, перечисленные в этой коллекции, возвращая их PrimaryGroupToken и DistinguishedName значения атрибутов.
    4. Запуск поиска ADO ADSI и затем в цикле набор записей, сравнение каждой группы PrimaryGroupToken В консоли восстановления команда PrimaryGroupID значение атрибута, ранее в кэше.
    5. Если соответствие найдено, остановить и отобразить различающееся имя для этой группы в качестве основной группы пользователя.
    6. Если совпадения не найдены, продолжайте циклическое считывание результатов поиска.
    Достоинство этого метода немедленно очевидны. Все объекты, используемые в собственном ADSI и не требуют дополнительных компонентов. Кроме того перечисление содержит только те группы, которые могут быть основной группы.

    Тем не менее, следует иметь в виду следующие недостаток: при IADsUser::Groups Перечисление коллекции, возвращается IADs интерфейс для членов группы. Если по некоторым причинам, пользователь, выполняющий перечисление не имеет необходимых разрешений для открытия определенного объекта, перечисление останавливается не Обнаружив ошибку. В следующем коде демонстрируется, как реализовать алгоритм выше:
    dim oUsr dim oGrp '' ToDo: Change the following variables to specific values for your domain.' DomainName = "myDomain"UserLoginName = "myUserLoginName"'' Bind to the user object with the Windows NT provider.' set oUsr = GetObject("WinNT://" & DomainName & "/" & UserLoginName & ",user") set grp = oUsr.Groups GrpID = oUsr.PrimaryGroupID GrpName = "" '' Building Query Filter for the search for all the groups that the user is a member of.'QueryFilter = "(|"for each Item in Grp    NT4Name = replace(Item.ADsPath,"WinNT://","")    tempArray = split(nt4Name,"/")    NT4Name = tempArray(1)   QueryFilter = QueryFilter & "(samAccountName=" & NT4Name & ")"nextQueryFilter = QueryFilter & ")"'' Building LDAP dialect Query String.'QueryString = "<LDAP://" & DomainName & ">;" & QueryFilter & ";PrimaryGroupToken,distinguishedName;subtree"'' Performing Query against the Active Directory for all the groups that ' the user belongs to and retrieving the RID of the group object off' the PrimaryGroupToken attribute on the user.'Dim oConnection, oCommand, oRecordsetSet oConnection = CreateObject("ADODB.Connection")Set oCommand = CreateObject("ADODB.Command")oConnection.Provider = "ADsDSOObject"oConnection.Open "Active Directory Provider"Set oCommand.ActiveConnection = oConnectionoCommand.CommandText = QueryStringoCommand.Properties("Page Size") = 900Set oRecordset = oCommand.Execute'' Looping through all the records in the search result to determine whether' any of these group's PrimaryGroupToken attribute value match the ' PrimaryGroupID attribute value stored on the user object.'While ((NOT oRecordset.EOF) and (Not bGroupFound))  if (GrpID = oRecordset.Fields("PrimaryGroupToken").value) then    GrpName = oRecordset.Fields("DistinguishedName").Value    bGroupFound = True   End If  oRecordset.moveNextWendSet oRecordset = NothingSet oCommand = NothingSet oConnection = Nothing'' Displaying Results of the search.' if( bGroupFound ) then    WScript.Echo "Primary Group for " & oUsr.AdsPath    WScript.Echo "Is: " & GrpName else    WScript.Echo "Primary Group Not Found" end if					
Ссылки
Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
297951Использование атрибута PrimaryGroupID найти основной группы пользователя

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

Свойства

Номер статьи: 321360 — последний просмотр: 06/08/2011 13:13:00 — редакция: 3.0

  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • операционная система Microsoft Windows 2000 Server
  • kbdswadsi2003swept kbinfo kbmt KB321360 KbMtru
Отзывы и предложения
<\/script>");