1

Active Directory (AD DS) には、「読み取り専用ドメイン コントローラー」 (RODC) の概念があります。おそらく下位互換性のために、デフォルトでは読み取り専用ドメイン コントローラーは無視されます。読み取り専用ドメイン コントローラーへの接続を許可することを明示的に指定する必要があります。

この C# コードでは、それが 2 か所で見られます。1 つは、新しいSystem.DirectoryServices.DirectoryEntryを作成する場合です。この問題は、RODC の使用を許可するSystem.DirectoryServices.AuthenticationTypes.ReadonlyServerフラグを設定することで簡単に解決できます。

私の質問は、 System.DirectoryServices.AccountManagement名前空間のクラスを使用する次のようなコードで同じことを達成する方法です。

using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
using (UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(
                                                      ctx,
                                                      IdentityType.SamAccountName,
                                                      ...))
{
    // ...
}

このコードは読み取り専用ドメイン コントローラーを無視することがわかったためです。

(上記は、MSDN の「Visual C# General」フォーラムの「System.DirectoryServices.AccountManagement を介して C# アプリケーションから読み取り専用ドメイン コントローラー (RODC) に接続する際の問題」というタイトルのスレッドに投稿された質問とまったく同じであることに注意してください。)

4

1 に答える 1

1

この機能が存在しないため、見過ごされていた可能性が最も高いです。UserPrincipalRODC では、RODC に存在する多くのメソッド(ChangePassword、Delete など)を実行できないため、見過ごされていない場合は意図的なものでした。この問題を解決するには、Microsoft が新しいReadOnlyUserPrincipal. さらに重要なことは、読み取り専用バージョンが存在しない限り (より適切な用語がないため)、名前空間が読み取り専用サービスSystem.DirectoryServices.AccountManagement以上のものであるように見えるのに、なぜ名前空間内の何かを読み取り専用としてインスタンス化するのが理にかなっているのかということです。です)。したがって、非読み取り専用サービスを使用して読み取り専用ソースを指定しても機能しません。

于 2012-06-07T14:25:10.450 に答える