-1

如果我拥有的唯一信息是用户名(和域,如果相关),我如何知道用户是否是管理员组的成员?

我确实知道如何为当前用户获取此信息。但是,就我而言,我需要为尚未登录的用户获取此信息(我正在使用凭据提供程序)。因此,我只能使用用户名和域。

此问题仅与 Windows 机器相关。

我正在使用 C#/C++。

我知道 C# WindowsPrincipal 类,如下所示:WindowsPrincipal

我也知道 IsUserAnAdmin() Windows API。但是,我不能使用这些方法,因为我正在处理尚未登录的用户(我的代码在用户实际进入 Windows 机器之前执行)

4

1 回答 1

0

如果“几乎总是正确”足够好,您将需要递归枚举用户的组成员身份以查看是否找到管理员组。这不是微不足道的,但也不是不合理的困难。没有内置的库可以为您完成。

第一个问题是假设您对 Active Directory 有足够的访问权限来读取所有相关组。默认情况下,本地系统帐户将能够执行此操作,但您需要禁止系统管理员更改组的安全权限,以使域计算机无法读取组成员身份。

此外,我不确定凭据提供程序在什么安全上下文中运行,因此您可能需要运行一个单独的服务来代表您枚举域成员身份。

第二个问题是这不包括特殊的安全主体,例如每个人、交互式等,但您可能会忽略这些——它们中的任何一个成为管理员组的成员都是非常不寻常的。如果您认为有必要,您可以尝试包含它们,或者您可以明确禁止系统管理员这样做。

必要时重新架构可能会更明智,这样您在获得用户密码之前就不需要做出此决定。

于 2016-08-23T00:18:12.820 回答