
Active Directory サーバーからユーザー情報を取得するコードをいくつか書きました。Active Directory サーバーにノードがあり、各ノードが地理的に異なる場所にある別の Active Directory インストールであるとします。たとえば、米国に 1 つの AD サーバー、オーストラリアにもう 1 つの AD サーバーがあり、米国にルート AD サーバーがあり、前 2 つがノードであるとします。
地理的な場所を越えてユーザーを検索するために書いたフィルタークエリをルートADサーバーで実行した場合、機能しますか?私が使用するクエリは次のとおりです。
(|(objectClass=user)(objectClass=person)(objectClass=inetOrgPerson))
実際にこのシナリオをテストすることはできませんが、ここで何が起こるかを知る必要があります。
答え1
AD は分散型のマルチマスター データベースです。一般的に、ユーザーについて任意のドメイン コントローラーにクエリを実行し、任意の DC (ノード) で同じ回答を得ることができます。
AD では、サーバー間のデータ変更のレプリケーションを構成できます。そのため、オーストラリアのユーザーが何らかの属性を変更し、ニューヨークのサーバーに対して何らかのデータをクエリすると、異なる回答が返される可能性があります。ドメイン管理者は、ドメイン内の時間レプリケーションについて教えてくれます。
レプリケーションが実行されると、どの DC でも同じ情報が得られます。通常、レプリケーション時間は約数分ですが、1 日に 1 回または 2 回のみに設定されている場合もあります。
これであなたの質問への回答になったと思います。
答え2
Active Directory に関する用語が正確ではありません。懸念される点が 2 つあります。
- ADの最も近いレプリカを照会する
- マルチドメイン環境におけるクエリの動作を理解する
グローバル カタログは、フォレスト内のすべてのドメインの内容のサブセットを保持します。「ノード」という用語が分散したドメインを指す場合、グローバル カタログに対するクエリを使用すると、単一のクエリでフォレスト内のすべてのドメインをクエリできます (探している属性が GC に複製されたサブセットの一部であると仮定します)。
物理的に近い DC の場所は、DNS と LDAP クエリの組み合わせによって特定されます。Google で「dns ldap find closer domain controller」を検索すると、いくつかの適切な最初の手順が見つかります (LDAP 経由で最も近いドメイン コントローラを検索する)。
Windows で開発している場合は、ADSI API を使用してドメイン コントローラーの場所を「無料で」取得できます。
答え3
ここで明確でないのは、「ノード」という用語が何を意味するかということです。
- 地理的に分散された複数のドメイン コントローラーを持つ単一の Active Directory ドメインですか?
- 各地理的な場所のユーザーとコンピューターを含む OU を持つ単一のドメインですか?
- さまざまな会社の地域オフィスを表す複数のドメインですか?
ドメインコントローラをクエリしている限り同じドメインの同じ答えが返ってくるでしょう同じクエリにいずれか 1 つから (レプリケーションの問題を除く)。
ただし、複数のドメインがある場合、または特定のドメインの特定のサブツリー (OU) を照会する場合は、異なる回答が返されます。
答え4
クエリに「OR」「|」演算子が必要なのは確かです。意味がありません。また、ノードをドメインと同一視していますか?
また、以下はテストにコードを必要としない例です。
dsquery * ドメインルート -filter (|(オブジェクトクラス=ユーザー)(オブジェクトクラス=人)(オブジェクトクラス=inetOrgPerson))" -attr *
しかし、私が言ったように、「OR」| 演算子は意味をなさない。
奇妙なことに、serverfaultsの回答コードにバグが見つかりました。これを実行した後にバグが消えたら奇妙です。