スポンサードリンク


LDAPユーザ検索の上限2000件を突破する方法!ADのMaxPageSizeの変更で取得できない問題を回避!

    maxpagesize ldap

    AD(Active Directory)と連携してADの登録ユーザの情報を
    取得するソフトウェアはいろいろあると思いますが、取得件数が多く正しいデータが取れないことってよくあります。

    LDAP連携によってADサーバからデータを取得しようにも、
    途中で応答が途絶えてしまい、中途半端なところでユーザ情報の取得に失敗してしまいます。

    よくある例が1000件までのデータは正常に取れて、1000件を超えたところでエラーになるケース。

    私の場合はJavaのjavax.namingパッケージで
    ldapsearchコマンドを実行するも2000件を超えるデータで2001件目のデータ参照時に例外が発生してしまいました。

    SizeLimitExceededException LDAP

    LDAP認証は成功しているのにユーザ検索クエリをかけ、ユーザを1件ずつ情報取得すると
    毎回同じところで「SizeLimitExceededException」という例外が発生してしまいます。

    直訳するとデータ容量の上限値を超えた例外となる訳ですが、
    明らかにサーバ依存の設定値による影響でこのようなエラーが出てしまうんだと思います。

    ただこのエラーの原因箇所がADサーバの環境設定値なのか、それとも通信元のAPサーバの設定値、もしくはLDAP通信時に特定のプロパティを渡さねばならないのか「原因はこれだ」という情報が全然見つからず困っていました。

    上限エラーの報告はネット上でたくさん挙がっているのに、解決方法があいまいだったりはっきりしたことが書いていません。
    私の探し方が悪いのかもしれませんが・・・。

    さていろいろ調べたところある手がかりを得ることができました。

     

    ADで2000件を超えるユーザ情報を取得できない原因はMaxPageSize

    これといった手掛かりを得られぬまま時間だけが過ぎましたが、
    原因はADサーバ側の「MaxPageSize」という環境設定値の上限でした。

    これはLDAP応答の最大サイズを指定するもので、デフォルト値が「2000」になっていました。
    この状態で外部からLDAPクエリを発行し上限数よりも大きいデータを取得し参照するとエラーとなってしまいます。

    私の環境では2000件を超える情報を取得し参照したことで、
    取得件数は2000件を超えているのに、不完全なデータが2001件目以降にできてしまい、
    存在しないデータを呼び出すことでSizeLimitExceededExceptionの例外が発生してしまいます。

     

    スポンサードリンク

     

    この設定値が原因ということがわかるまでかなりかかってしまいました・・・。
    意外にもこういった問題って大きくネットで取り上げられそうだけど、探すもなかなか出てこないんですよね。

    もしこれからJavaなどでLDAP認証をし大量のユーザ情報を取得する際に、
    同様の現象に悩まされている方は以下の手順で解決できると思うので是非試してみて下さい。

     

    MaxPageSizeの変更方法

    ADサーバのコマンドラインツールなどで、「ntdsutil」と入力し、
    NTDSUTILを起動させましょう。

    手順としては起動後に「LDAP policies」コマンドを用いて、
    LDAPプロトコルポリシーの管理画面を表示させます。

    LDAP policies」と入力します。

     

    次に“Connections” コマンドで特定のドメインコントローラに接続します。

    ldap policyの入力箇所に「Connections」と入力、
    次の行が表示されたら、「Connect to Server “ドメインコントローラのサーバ名”」で
    ADのポリシー情報にアクセスします。

     

    ちなみにサーバ名が「sample.local」なら、
    Connect to Server “sample.local”」と入力します。

    接続するとユーザの資格情報によって自動的にログインされます。
    一度LDAPポリシーにアクセスすると設定値が取得できますので、切断します。

    切断するには「quit」と入力します。

     

    切断ができましたら、
    Show Values”コマンドで 現在の設定値を確認します。

     

    すると以下の画像のようにADのポリシー情報の設定が表示され、
    その中に「MaxPageSize」の項目が一覧にあります。

    ldap MaxPageSize 変更

    私のADサーバの環境では「2000」になっていました。
    このMaxPageSizeの上限設定が検索件数に悪影響を与えていた張本人です。

    この値を変更するには、以下の手順を続行して下さい。

     

    試しに2000から5000に変更しようと思います。
    Set Maxpagesize to 5000”コマンドで「MaxPageSize」の値を5000に変更することが可能です。

     

    最後に設定値を上書きするにコミットしましょう。
    “Commit Changes”コマンドによりMaxPageSizeの変更値を適用させます。

     

    以上でMaxPageSizeの値の変更ができます。
    ちなみにポリシー情報を変更しましたが、「gpupdate」コマンドや「サーバ再起動」は行なわなくてもそのまま変更した情報がすぐに反映されるので楽です。

    あとは検索上限に引っかかっていたアプリケーション等でテストしてみて下さい。

    MaxPageSizeの変更を行なったところ問題なくユーザ検索処理を実行できました。
    まあこの設定値だと5000件を超えれば同様の現象が起きてしまいます。

    アプリケーションやユーザの登録件数に応じて最適な数値で設定すると良いでしょう。

    あまりにも大きい値を設定してしまうと思わぬ問題が発生することも
    あるかもしえないのでくれぐれも慎重に行なって下さいね。

      The following two tabs change content below.
      よっき
      パソコンが大好きな青年。職業はプログラマ。 幼少期からパソコンが好きで、趣味がそのまま仕事になりました。 主にウェブ系コンテンツの開発が中心です。 自作PCの魅力に惹かれたのは学生時代の頃で、現在に至ります。 自作PC専門ブログで、お得な情報を紹介しています。 趣味はホームページ制作かな。起業を夢見て奮闘中の毎日!

      スポンサードリンク


      コメントを残す




      *

      このページの先頭へ