4

私は、Windows サービスとして作成された Active Directory 同期ツール (.NET 2.0 / C#) を持っており、これにしばらく取り組んでおり、最近、グループ メンバーシップの変更に基づいてイベントを駆動する機能を追加する任務を負っています。基本的なシナリオは、ユーザーがセキュリティ データベースと同期され、グループ メンバーシップが変更された場合、ユーザーのアクセス権を変更する必要があるというものです (つまり、私が "IT スタッフ" のメンバーになった場合、自動的にアクセス権を受け取る必要があります)。そのグループから削除された場合、サーバー ルームへのアクセスは自動的に失われます)。

問題は、グループに対して DirectorySynchronization を実行すると、メンバーが追加/削除されたグループが返され、そこからメンバー リストを取得すると、そのグループ内のすべてのメンバーのリストが返されることです。追加または削除されました。これはかなり効率的な問題につながります。つまり、ユーザーが追加または削除されたかどうかを知るために、各グループとすべてのメンバーのリストをローカルに保持し、それを現在のリストと比較して、誰が追加または削除されたかを確認する必要があります。追加された (ローカル リストではなく)、および削除されたユーザー (現在のメンバー リストではなくローカル リスト)。

グループ メンバーシップの詳細をメモリ内の DataSet に保存し、新しいメンバーシップの変更を処理するたびにディスクに書き込むことについて議論しています。そうすれば、サービスが停止/クラッシュしたり、マシンが再起動したりした場合でも、ディスク上の最後の情報と現在のグループ メンバーシップ リストの情報を比較することで、セキュリティ データベース内の Active Directory の現在の状態を取得できます。ただし、これは非常に非効率的です。グループ内のすべてのメンバーを実行してデータセットの内容と比較し、リストに変更があるたびに変更をディスクに書き込みます。

誰かが以前にこのシナリオを扱ったことがありますか? グループ メンバーのデルタのみを取得する方法はありますか? この状況で、パフォーマンスへの影響を最小限に抑えながら変更を見逃さないようにするにはどうしますか?

編集: AD には 500 人のユーザーが含まれている可能性があり、200,000 人のユーザーが含まれている可能性があります。

4

3 に答える 3

2

グループポリシーエディターでアカウント変更の成功の監査を設定できます

次に、セキュリティログでエントリを監視し、アカウントの変更に関するログエントリを処理できます。

例えば

        EventLog myLog = new EventLog("Security");

        // set event handler
        myLog.EntryWritten += new EntryWrittenEventHandler(OnEntryWritten);
        myLog.EnableRaisingEvents = true;

セキュリティイベントログにアクセスする権限があることを確認して くださいhttp://support.microsoft.com/kb/323076

于 2008-09-17T18:26:27.107 に答える
1

追跡する必要がある Active Directory オブジェクトの数によって異なります。少数 (1000 ユーザー未満) の場合は、ほとんどパフォーマンスに影響を与えずに、状態データをディスクにシリアル化できる可能性があります。非常に多数のオブジェクトを扱っている場合は、SQL Express などで単純な永続化スキーマを作成し、それを使用する方が効率的かもしれません。

于 2008-09-17T18:06:13.740 に答える
1

ディレクトリ同期とユーザー プロビジョニングに役立つ製品があることをご存知ですか (これらの用語をググってください)。ここで発明されたものではなく、現在の状況では投資を正当化する必要があるかもしれませんが、商用ソリューションが既に存在するコードを開発および維持することは、長期的に常に最も費用対効果の高い方法ではありません。走る。

すべてがイベンティング/プロビジョニングをサポートしているわけではありませんが、変更の追跡と配布はサポートしています。これらの機能に加えてイベンティング ソリューションを作成することは大したことではありません。

Microsoft にはIdentity Integration Server (MISS) があり、Identity Lifecycle Managerの一部として再パッケージ化されています。もともとは、より一般的なメタ/マスター データ管理製品に基づいて構築されましたが、実行可能です。IBM にはTivoli Directory Integratorがあります (ただし、2 年ごとの名前の変更についていく必要があります!)。Oracle にはOracle Identity Managerがあり、Sun にはIdentity Managerがあります。これらのほとんどは、主要なプレーヤーがポートフォリオのギャップを埋めるために購入した主要な製品です。

もちろん、これらはエンタープライズ クラスの製品であり、大規模で高価ですが、一般的には将来にわたって安全で拡張可能です。それらの完全な力が必要ない場合は (まだ!)、自分用にコピーを保存することを検討する必要があります。その場合、AD LDS (以前の AD/AM) を使用して、最後の既知の AD ツリーのレプリカを保存することを検討しましたか? 相違点を比較するのに最適な形式ではありませんが、ディレクトリ データベースは、軽量の種類であっても適度に拡張されます。

于 2009-03-16T11:36:23.957 に答える