4

net-ldapgemを使用してActiveDirectoryを検索しています。
フィルタを使用してユーザーを検索できます。

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がneilで始まり​​、コンピューターアカウントではないすべてのユーザーが表示されます。

有効なアカウントのみを検索するフィルターを追加するにはどうすればよいですか?

4

3 に答える 3

15

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ルールです。プロパティのいずれかのビットが値と一致する場合、一致ルールはtrueです。この規則は、ビットごとのOR演算子に似ています。

例として、無効になっているユーザークラスオブジェクトをActiveDirectoryに照会する場合があります。この情報を保持する属性は、u​​serAccountControl属性です。この属性は、さまざまなフラグの組み合わせで構成されています。無効にするオブジェクトを設定するためのフラグはUF_ACCOUNTDISABLEで、値は0x02(10進数の2)です。UF_ACCOUNTDISABLEDビットセットを使用してuserAccountControlを指定するビット単位の比較フィルターは、次のようになります。(UserAccountControl:1.2.840.113556.1.4.803:= 2)

于 2013-01-04T08:26:38.073 に答える
3

あなたの問題を解決するためのより良い方法があります。

  1. デフォルトでは、すべてのマシンアカウント名は、$で終わりますsvn$@DOMAIN.COM
  2. あなたは素晴らしい属性を持っていますsAMAccountType。アカウントの種類がわかります。ADに組み込まれているバイナリフラグ構文を使用します。
  3. 有効なアカウント?私はすでにここでこれに答えました。
于 2013-01-03T19:49:23.390 に答える
3

!(userAccountControl:1.2.840.113556.1.4.803:= 2)の使用に関するDaroの回答は完全に正しいですが、Net :: LDAP::Filter.joinメソッドを使用してrubynet/ldapで機能させることはできませんでした。

しかし、私はそれをNet :: LDAP::Filter.constructで実装することができました。

filter = Net :: LDAP :: Filter.construct( "(&(objectClass = User)(memberOf = CN = mygroup、OU = Groups、DC = myplace)(!(userAccountControl:1.2.840.113556.1.4.803:= 2 ))) ")

于 2013-12-17T15:48:28.443 に答える