Cor*_*rey 5 active-directory ldap
我将如何为 AD 构建 LDAP 查询以返回特定安全组中其帐户未禁用的所有用户?
我试过
(&(objectClass=person)(!(userAccountControl= ACCOUNTDISABLE )))
但这似乎不起作用。
我正在尝试设置 Google Apps Directory Sync 并希望它同步所有属于“Google Apps 用户”安全组且其帐户未被禁用的用户(或者,如果帐户在 AD 中被禁用,则只需暂停 GA 中的帐户)。
有时,通过设置各种位,一组是/否值存储在单个值中。您可以使用位掩码来检查它们是否已设置。
例如,十进制的 546 是二进制值 10 0010 0010 - 十进制的 512、32 和 2 的总和。(所有这些数字都是 2 的幂,这意味着它们的二进制表示中只有一个“1”) :这意味着设置了这三个是/否值。
根据userAccountControl 文档,这意味着设置了以下值:
NORMAL_ACCOUNT (512)
PASSWD_NOTREQD (32)
ACCOUNTDISABLE (2)
Run Code Online (Sandbox Code Playgroud)
但是,例如,如果您有一个没有PASSWD_NOTREQD设置的用户(因此他们的 userAccountControl 值为 512),或者一个也DONT_EXPIRE_PASSWORD设置了(65536) 的用户(意味着他们的值为 66082),您将不会在查询中找到这些用户.
您需要做的是使用按位 AND来查询仅该位的值:
10 0010 0010
00 0000 0010
------------
00 0000 0010
Run Code Online (Sandbox Code Playgroud)
如果该位的值为 1,则设置该位。其他位的设置无关紧要,因此您实际上是在询问是否userAccountControl & 2 == 2.
使用 AND 检查位的 LDAP 语法是 1.2.840.113556.1.4.803,因此您可以查看该ACCOUNTDISABLE位是否设置为 (userAccountControl:1.2.840.113556.1.4.803:=2)。在它周围添加 (!(foo)) 可为您提供所有未禁用的用户。
这有效!
(&(memberOf=CN=Google Apps Users,DC=bbc,DC=pri)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16719 次 |
| 最近记录: |