web-dev-qa-db-ja.com

グループが定義されているドメインのドメインコントローラーには、すべてのメンバー情報が含まれますか?

多くのドメインを持つフォレストのセットアップがあるとしましょう。いずれかのドメインから任意のセキュリティグループを選択した場合、ネストされたグループの結果であるユーザーメンバーを含め、そのグループのすべてのユーザーメンバーを見つけるための最良の方法は何ですか?グループの種類(ユニバーサル、グローバル、ドメインローカルなど)に関係なく、これを実行できるようにしたい。私の理解では、グループメンバーはすべてのグループタイプに複製されていないため、グローバルカタログを単独で使用することはできません。

最終的にはコードを使用してこれを行いますが、今のところはプロセスを理解したいだけです。簡単にするために、グループのobjectGUID値をすでに知っているとしましょう。高レベルの手順は次のようになりますか?

  1. フォレスト内のグローバルカタログでグループをクエリし(objectGUIDを介して)、グループが定義されているドメインを取得します。 objectCategory属性 識別名

  2. グループのobjectGUIDおよびmemberOfを使用して、グループが定義されている(ステップ1で取得された)ドメインコントローラーを照会します。フィルタとして1.2.840.113556.1.4.1941

他に何かありますか?さらにドメインコントローラー(たとえば、さらにサブドメイン)をクエリする必要があるエッジケースはありますか?グループタイプ(または他の属性)によってすべてのメンバー情報がグローバルカタログに複製されることが保証されるため、グローバルカタログより先に進む必要がない場合は他にありますか?

[〜#〜]編集[〜#〜]

  • ObjectCategoryを識別名に変更しました
1
Hmmmmm

memberOfで検索しても、検索範囲内のユーザーのみが検索されるため、すべての結果が得られるわけではありません(たとえば、1つのドメインを検索すると、グループに他のドメインのメンバー)。

グループのメンバーである信頼できるリストは、グループ自体の member 属性にあります。 member属性には、グループのすべてのメンバーのdistinguishedNameが含まれます。 member属性はグローバルカタログに複製されます(ユニバーサルグループの場合のみ)。ただし、ADでは一度に1500人のメンバーしか提供されません。それ以上のグループについては、もっと多くを求める必要があります。

objectGuidから始めることを計画している場合は、それを使用してオブジェクトに直接バインドできます。検索する必要はまったくありません。この表記を使用して、GUIDを使用してオブジェクトにバインドします。

LDAP://<GUID={guid}>

どこ {guid}は文字列GUIDです。次に、member属性を読み取ります。

グループに他のドメインのメンバーがいる場合、ドメインが同じフォレストにないと、状況が少し複雑になる可能性があります。このような場合、グループのmember属性には、外部ドメインの実際のアカウントのSIDを含む「外部セキュリティプリンシパル」と呼ばれるグループの同じドメイン上のオブジェクトが含まれます。そのアカウントに関する情報(名前や電子メールアドレスなど)を取得する場合は、その情報を使用して外部ドメインに接続し、その情報を取得する必要があります。

ADには、異なる「プライマリグループ」の概念もありますが、心配する必要はありません。これについて メンバーをメンバーにする理由 という記事を書きました。

また、C#でサンプルコードを使用して、 グループのすべてのメンバーを検索する についての記事を作成しました。 C#を使用する予定がない場合でも、いずれにしてもバックグラウンドですべてLDAPであるため、同じ結果を別の言語で複製できます。

2
Gabriel Luci