2012-03-01 9 views
2

「有効なアカウントを持つすべてのユーザーに教えてください」というMicrosoftのActive Directory(Javaを使用)に検索文字列を送信したいと考えています。アクティブなディレクトリで有効になっているアカウントのみを取得する

現在、私が持っている:

文字列SEARCH_STRING = "(&(objectClassの=ユーザー))";

しかし、これは私にADのユーザーだけを与えます。私はまた、活発な人だけを取得したいと思います。それはJavaにありますが、私はLDAPにとって重要ではないと思います。

+1

あなたのコンテキストで「アクティブ」が意味するものを把握し、適切なLDAPクエリを記述する必要があります。あなたは「アクティブ」という意味を定義していないので、ここで誰でもあなたを助けることができます。 –

+0

迅速な対応に感謝します。コードのどの部分が 'アクティブ'が定義されているかを決定しますか? (通常、私は、AD接続を取得するためにユーザー名、パスワード、ホスト情報でいっぱいになるLDAPプロパティオブジェクトを作成し、コンテキストと検索クエリを作成し、ADから私の応答を取得します。何が「能動的」なのかを定義します。)解明できますか? (私は自分のコードを提供することができますが、どの部分が適切とみなされるのかわかりません) – Sal

+1

"アクティブ"という意味と、それがどのようにクエリできるLDAP属性にマップされているかを決める必要があります。私たちはあなたの文脈であなたが「活動的」であることを意味するものを知りません。 –

答えて

9

有効なユーザーを取得するには、userAccountControl属性、特にACCOUNTDISABLEフラグに対応するその2番目のビットをチェックする必要があります。 MS KB 305144

この

は次のようにLDAPフィルタを用いて行うことができます。

(!(userAccountControl:1.2.840.113556.1.4.803:=2)) 

チェックどのようにこの作品の詳細については、この記事についてのFiltering for Bit Fields

また、コンピュータアカウントはユーザータイプから継承されているので、フィルタリングする条件をフィルタに追加する必要があります。 NORMAL_ACCOUNTフラグ(512)のビットをチェックして、他の種類のアカウントをフィルタリングすることもできます。

アクティブユーザーが何を意味するのか分かりませんので、お手伝いできません。

+0

+1、私は半分でした最後:o) – JPBlanc

3

これは、アカウントがであるかどうかを確認するためのActive Directoryの批判を理解する限り、です。

  • ACCOUNTDISABLE(2)
  • ロックアウト(16)

フィルタあなたの中に、このフィールドを使用するには:

How to use the UserAccountControl flags to manipulate user account propertiesはあなたのアカウントの状態を与え、あなたは、に興味がある可能性がありMicrosoft article Search Filter Syntaxに記載されているように、LDAP_MATCHING_RULE_IN_CHAIN OIDを使用できます。

(&(objectCategory=person)(!(userAccountControl:1.2.840.113556.1.4.804:=18)))