【Active Directory】 属性にインデックスを付与する方法

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【6/19開催】Kong Community Japan Meetup #4
本イベントでは、Kong Inc. のVP of ProductであるReza Shafii氏もプレゼンターとして参加。当社からはアーキテクト マネージャーの槌野の登壇が決定!参加無料です!!
https://column.api-ecosystem.sios.jp/connect/kong/1081/

【6/21開催】開発者目線でのSBOMとの向き合い方
SBOMの導入から開発者がSBOMの作成・管理を自動で行っていくための方法(デモ)を紹介します。SBOMを全く知らない人から、開発との統合までを紹介するので様々なレベルの方に学びがあるライブとなる予定です!
https://tech-lab.connpass.com/event/321422/

【7/19開催】現場で役立つAzure神小技10+α 〜生成AI,RAG,コスト削減など旬な技術満載のLT大会〜
Azureの最新技術や実用的な小技を紹介する特別なライトニングトーク大会を開催します!
https://tech-lab.connpass.com/event/319077/

【7/26開催】最適なIaCツールを選ぼう
プロジェクトでのツール選びに困らないための重要な観点をご説明します!
https://tech-lab.connpass.com/event/319532/

こんにちは。サイオステクノロジーの木村です。

Active Directory(AD) の属性にはインデックスをつけることができます。インデックスをつけると、その属性をキーに検索した際の検索スピードが速くなります。(インデックス付き属性についての公式ドキュメントはこちら
Active Directoryには、デフォルトでインデックスがついている属性もありますが、そうでない属性もあります。
データ数が多い環境で、任意の属性をキーに検索することが頻繁にある場合など、その属性にインデックスをつけると検索処理を高速化できます。
そこで今回は、属性にインデックスをつける方法をご紹介します。

スキーマ管理ツールの有効化

Windows PowerShell を起動し、下記のコマンドを実行して、スキーマ 管理ツールを有効化します。


  regsvr32.exe schmmgmt.dll

インデックスの作成

1. [スタート] – [ファイル名を指定して実行] をクリックして立ち上げ、「mmc」と入力して「OK」をクリックします。

2. Microsoft 管理コンソールにて、[ファイル] – [スナップインの追加と削除] をクリックします。

3. [Active Directory スキーマ] を選択して「追加」をクリックします。

4. 「OK」をクリックします。

5. [Active Directory スキーマ] を展開し、[属性] を選択すると、右側に属性の一覧が表示されます。

6. 一覧よりインデックスを付与したい属性を右クリックし、[プロパティ] をクリックします。

7. [この属性のインデックスを作成する(I)] にチェックを入れ、「適用」をクリックします。
「OK」をクリックしてウィンドウを閉じます。

以上でインデックスの作成は完了です。

インデックス付き属性の確認

既存でインデックスがついている属性がどれなのかを確認したい場合は、以下の方法で確認することができます。

1. [スタート] – [ファイル名を指定して実行] をクリックして立ち上げ、「ldp.exe」と入力して「OK」をクリックします。

2. [接続] – [バインド] をクリックします。

3. 管理者のユーザー情報を入力して「OK」をクリックします。

4. [参照] – [検索] をクリックします。

5. 以下のように入力して「実行」をクリックします。

  • ベースDN:CN=Schema,CN=Configuration,DC=・・・以降は環境に合わせた値
  • フィルター:(searchFlags=1)
  • 属性:検索結果に表示する属性を絞りたい場合はその属性名を指定。全ての属性を表示する場合は「*」を指定。


6. 検索結果にインデックスがついている属性が全て表示され、インデックスがついている属性を確認することができます。

処理時間の比較

属性にインデックスをつけた場合とつけていない場合とで検索にかかる時間を比較してみました。
(検証した環境のユーザーデータ登録数:約13万件)

方法

Windows PowerShell にて以下のようにコマンドを実行して、属性をキーに Active Directory を検索し、検索にかかった時間を計測します。


  [hashtable] $param = @{
    ldapfilter = "(<属性名>=<検索する値>)";
    searchbase = "<任意のOU>"}
  (Measure-Command{get-aduser @param}).TotalSeconds;

属性にインデックスを付与していない場合

処理時間:約1秒

属性にインデックスを付与した場合

処理時間:約0.004秒

インデックスを付与していない場合に比べ、処理時間がかなり高速化されていました。

まとめ

検索時間は、Active Directory に登録されているデータ数や、その属性に登録されている値の一意性などにより異なってはきますが、インデックスをつけると検索がかなり高速化できることがわかります。
検索を高速化するにはとても便利なインデックスですが、インデックス付き属性が多いほど新しいインスタンスを作成するのに時間がかかったり、ADレプリケーションの時間にも影響するなどデメリットもあります。また、インデックスはクラスではなく属性に適用されるため、特定のクラスのインスタンスだけではなく全てのインスタンスに付与されます。
これらを考慮し、属性にインデックスを付与するか否かを検討する必要があります。

アバター画像
About 木村 29 Articles
Azureなどのクラウドでの稼働を主としたアプリケーション開発を行なっています。
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる