Атрибут msDS-UserPasswordExpiryTimeComputed
является составным атрибутом, что означает, что он рассчитывается во время его запроса. Значения не сохраняются. Из-за этого вы не можете использовать созданные запросы в запросах. Вы можете читать их только с учетной записи, которую вы уже нашли.
Если учетная запись настроена так, что пароль никогда не истекает, атрибут userAccountControl
обновляется. Это битовый флаг, означающий, что каждый бит в двоичном представлении значения является флагом включения / выключения с различным значением.
Требуемая настройка - ADS_UF_DONT_EXPIRE_PASSWD
, которая показана на документация в виде шестнадцатеричного значения 0x00010000
. Это двоичное значение 1 0000 0000 0000 0000
. Поэтому, когда 17-й бит равен 1
, пароль никогда не истекает. Когда 17-й бит равен 0
, срок действия пароля истекает. Однако вы можете использовать десятичный эквивалент 65536
в запросе.
Я обычно использую нотацию запроса LDAP, которая будет выглядеть следующим образом:
(&(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=65536))
Это найдет все учетные записи пользователей. где пароль установлен, чтобы никогда не истек. Это странное число описывается здесь как идентификатор объекта (OID) LDAP_MATCHING_RULE_BIT_AND
. Это побитовый оператор AND, который проверяет, установлен ли определенный бит.
Я не проверял это, но в записи SQL вы, вероятно, использовали бы &
, то есть побитовый оператор И , например:
WHERE userAccountControl & 65536 = 65536