搜索在净LDAP的红宝石“已启用”用户(Search for “Enabled” users in

2019-08-05 11:52发布

我现在用的是净LDAP宝石搜索Active Directory。
我可以搜索使用过滤器的用户:

filter = Net::LDAP::Filter.eq("sAMAccountName", "neil*")
filter2 = ~Net::LDAP::Filter.eq("objectclass", "computer")

joined_filter = Net::LDAP::Filter.join(filter, filter2)

ldap.search(:base => treebase, :filter => joined_filter) do |entry|
   puts entry.sAMAccountName
end

这给了我它的sAMAccountName赋始于尼尔,而不是计算机帐户的所有用户。

如何添加只启用搜索帐户过滤器?

Answer 1:

您可以使用ruleOID LDAP_MATCHING_RULE_BIT_AND规则,以检查的UserAccountControl。

我用这个过滤器来查找已启用用户:

(&(objectCategory=organizationalPerson)(objectClass=User)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))

userAccountControl的:1.2.840.113556.1.4.803将有2位集,如果帐户被禁用。

ruleOID的值可以是以下中的一种:

•1.2.840.113556.1.4.803 - 这是LDAP_MATCHING_RULE_BIT_AND规则。 匹配规则是真实的,只有当从属性所有位匹配值。 这条规则是像位AND运算符。

•1.2.840.113556.1.4.804 - 这是LDAP_MATCHING_RULE_BIT_OR规则。 如果从属性的任何位匹配值的匹配规则是真实的。 这条规则是像位OR运算符。

一个例子是,当你想查询是被禁用的用户类对象的Active Directory。 保存此信息的属性为userAccountControl属性。 该属性是由不同的标志的组合。 设置要禁用对象的标志是UF_ACCOUNTDISABLE,其中有0×02(2十进制)的值。 按位比较过滤器,用于指定与所述UF_ACCOUNTDISABLED位组userAccountControl的将类似于此:(的UserAccountControl:1.2.840.113556.1.4.803:= 2)



Answer 2:

有一种更好的方法来解决你的问题。

  1. 默认情况下,所有计算机帐户名称以一个$ ,如svn$@DOMAIN.COM
  2. 你有精彩的atttribute sAMAccountType 。 它会告诉你那是什么类型的帐户。 使用AD-内置二进制旗标语。
  3. 启用帐户? 我已经回答了这个位置 。


Answer 3:

达罗的回答关于使用(userAccountControl的:1.2.840.113556.1.4.803:= 2)!是完全正确的,但我不能使它与使用Net :: LDAP :: Filter.join方法红宝石网/ LDAP工作。

然而,我还是设法与网:: LDAP :: Filter.construct,如来实现它

滤波器=净:: LDAP :: Filter.construct(“(&(objectClass的=用户)(=的memberOf CN = MYGROUP,OU =组,DC = MyPlace酒店)((userAccountControl的:1.2.840.113556.1.4.803:= 2 )))“)



文章来源: Search for “Enabled” users in net-ldap for Ruby