0

次のコード行で、ユーザーがドメイン管理者であるかどうかを確認できます。

using (DirectoryEntry domainEntry = new DirectoryEntry(string.Format("LDAP://{0}", domain)))
{
    byte[] domainSIdArray = (byte[])domainEntry.Properties["objectSid"].Value;

    SecurityIdentifier domainSId = new SecurityIdentifier(domainSIdArray, 0);
    SecurityIdentifier domainAdminsSId = new SecurityIdentifier(WellKnownSidType.AccountDomainAdminsSid, domainSId);

    using (DirectoryEntry groupEntry = new DirectoryEntry(string.Format("LDAP://<SID={0}>", BuildOctetString(domainAdminsSId))))
    {
        string adminDn = groupEntry.Properties["distinguishedname"].Value as string;
        SearchResult result = (new DirectorySearcher(domainEntry, string.Format("(&(objectCategory=user)(samAccountName={0}))", userName), new[] { "memberOf" })).FindOne();
        return result.Properties["memberOf"].Contains(adminDn);
    }
}

詳細はこちら

しかし、ドメイン コントローラーがオフになっている場合、またはオフライン (接続なし) の場合、次のエラーが発生します。

サーバーが動作していません。

System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
で System.DirectoryServices.DirectoryEntry.Bind()
で System.DirectoryServices.DirectoryEntry.get_AdsObject()
で System.DirectoryServices.PropertyValueCollection.PopulateList()
で System.DirectoryServices.PropertyValueCollection..
System.DirectoryServices.PropertyCollection.get_Item(String propertyName)の ctor(DirectoryEntry entry, String propertyName)

ユーザーがドメイン コントローラーをオフにしてドメイン管理者であるかどうかを確認する機能はありますか?

4

1 に答える 1

1

ドメイン コントローラーに接続せずに、現在のユーザーがドメイン管理者であるかどうかを確認できます。

任意のユーザーがドメイン管理者であるかどうかを確認することが要件である場合、ドメインコントローラーなしでは実行できないと思います。

切断されたログインの目的で Windows がログイン資格情報をキャッシュするのは事実です。キャッシュは に保存され、暗号化されHKEY_LOCAL_MACHINE\SECURITY\Cacheます。設計上、キャッシュは LSA によってのみ復号化できます。LSA を介さずに情報を復号化またはクエリする他の方法を見つけた場合、それは Microsoft がおそらくすぐに修正するセキュリティ ホールです。したがって、唯一の望みは、LSA が API を公開して、資格情報キャッシュに格納されているグループ情報をクエリすることです。私の知る限り、そのような API は存在しません。文書化された LSA API については、こちらを参照してください。

于 2012-08-18T17:09:48.300 に答える