Назад | Перейти на главную страницу

Как мне создать LDAP-запрос для AD, который возвращает всех пользователей в определенной группе безопасности, учетные записи которых не отключены?

Как мне создать LDAP-запрос для AD, который возвращает всех пользователей в определенной группе безопасности, учетные записи которых не отключены?

Я попытался

(& (objectClass = человек) (! (userAccountControl =ОТКЛЮЧАЕТСЯ)))

но это, похоже, не работает.

Я пытаюсь настроить Google Apps Directory Sync и хочу, чтобы он синхронизировал всех пользователей, которые входят в группу безопасности «Пользователи Google Apps», чьи учетные записи не отключены (или, при желании, просто приостановите учетные записи в GA, если они отключены в AD. ).

Иногда набор значений да / нет сохраняется в одном значении путем установки различных битов. Вы можете использовать битовая маска чтобы проверить, установлены ли они.

Например, 546 в десятичном формате - это двоичное значение 10 0010 0010, в десятичном - сумма 512, 32 и 2. (Все эти числа являются степенями двойки, что означает, что в их двоичном представлении имеется только одна '1') : Это означает, что эти три значения «да / нет» установлены.

Согласно userAccountControl документы это означает, что установлены следующие значения:

NORMAL_ACCOUNT (512)
PASSWD_NOTREQD (32)
ACCOUNTDISABLE (2)

Однако, например, если у вас был пользователь, у которого не было PASSWD_NOTREQD set (так что их значение userAccountControl было 512), или тот, у кого также DONT_EXPIRE_PASSWORD (65536) (это означает, что их значение было 66082), вы не найдете этих пользователей в своем запросе.

Что вам нужно сделать, это использовать побитовое И чтобы запросить значение только этого бита:

10 0010 0010
00 0000 0010
------------
00 0000 0010

Если значение этого бита равно 1, то этот бит установлен. Неважно, на что установлены другие биты, поэтому вы фактически спрашиваете, userAccountControl & 2 == 2.

Синтаксис LDAP для проверки бита с использованием AND - 1.2.840.113556.1.4.803, поэтому вы можете увидеть, ACCOUNTDISABLE бит устанавливается с помощью (userAccountControl: 1.2.840.113556.1.4.803: = 2). Добавление (! (Foo)) вокруг него дает вам всех пользователей, которые не отключен.

Похоже, это сработает, но не подберет членов вложенной группы:

(&
    (memberOf=CN=GApsUsers,DN=....)
    (!(userAccountControl=546))
)

Это работает!

(&(memberOf=CN=Google Apps Users,DC=bbc,DC=pri)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))

близко, но

(& (objectClass = человек) (! (userAccountControl = ACCOUNTDISABLE)))

должно быть

(& (objectClass = человек) (! userAccountControl = ACCOUNTDISABLE))

обратите внимание, что я не могу проверить это с того места, где я нахожусь!