通过 .NET 查询 Active Directory 时所需的访问权限和潜在的副作用

Required access rights and potential side effects when querying Active Directory via .NET

我编写了以下代码来检查域用户是否已启用并存在于我们的 Active Directory 中。作为 AD 查询的新手,我想知道的是:我需要查询 AD 的 AD 访问权限方面的哪些权限?此代码 运行 在我的帐户下 运行 时没问题,但我想 运行 它作为服务并且想知道服务帐户的必要访问权限?

此外,在发送这些查询时,AD 中会不会有任何副作用?我不认为我可以用这个代码锁定被查询的帐户,但我很小心所以想在这里问这个问题。

PrincipalContext context = new PrincipalContext(ContextType.Domain);
foreach (String x in new String[] { "mydomain\blub", "mydomain\blab", "mydomain\blib" })
{
    UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, x);

    if (user == null || user.Enabled == false)
        Console.WriteLine(x + " --> Account kaputt!");
    else
        Console.WriteLine(x + " --> Account enabled!");
}

默认情况下,您不需要任何额外权限即可从 Active Directory 查询用户帐户。如果您的应用程序使用的帐户是普通的 Active Directory 帐户,或者应用程序被配置为在加入 Active Directory 域的计算机上使用 NetworkService 帐户 (https://msdn.microsoft.com/en-us/library/windows/desktop/ms684272(v=vs.85).aspx),它将正常工作。

以这种方式访问​​ Active Directory 的基本注意事项是性能和安全性。因此,您应该确保您的环境不会因(不必要的)查询而超载,并确保以安全的方式访问 Active Directory。

也可以考虑使用 PowerShell 来完成这样的简单任务 - 您可以通过 运行

实现类似的效果
@('blub', 'blab', 'blib') | Get-ADUser | select Name, Enabled

而且不需要编译这个