如何根据用户名/域名检查用户是管理员组的成员

如何根据用户名/域名检查用户是管理员组的成员

问题描述:

如何知道用户是否为管理员组的成员(如果我拥有的唯一信息是用户名(和域if相关的)?如何根据用户名/域名检查用户是管理员组的成员

我知道如何获取当前用户的这些信息。 但是,就我而言,我需要为尚未登录的用户获取此信息(我正在使用Credential Provider)。因此,我只能使用用户名&域。

此问题仅与Windows机器相关。

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

我知道C#WindowsPrincipal类的,如图:WindowsPrincipal

我也知道IsUserAnAdmin()的Windows API的。

using System.Security.Principal; 
    public bool admin() 
{ 
WindowsPrincipal principal = new WindowsPrincipal(WindowsIdentity.GetCurrent()); 
     return principal.IsInRole(WindowsBuiltInRole.Administrator); 
} 

在: 但是,因为我处理未在尚未

+0

你有没有试过cmd-line'net user/domain the_user_id'?它返回了很多东西。 –

+0

管理员权限是什么?文件,服务器,他们在电脑上?你正在运行一个网站,一个Windows应用程序,你是从Windows机器还是unix机器运行它? Theres只是没有足够的信息来帮助您 – BugFinder

+1

Windows使用安全的对象。访问对象(如文件或进程)的需求分别为每个对象设置。没有*“此用户有权访问所有内容”*用户帐户,更不用说可以指示该标志的标志。你为什么不问真正的问题,而不是你的解决方案? – IInspectable

如果“几乎总是对的”是不够好,你需要递归枚举用户的组成员,看看你是否找不到管理员s组。这不是微不足道的,但它并不是不合理的困难。没有内置的库来为你做。

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

另外,我不确定凭证提供程序运行的是什么安全上下文,因此您可能需要运行单独的服务来代表您列出域成员资格。

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

它会可能根据需要更重要的重新架构,以便您不需要做出这个决定,直到您已获得用户的密码。

+0

谢谢!我想我可以按照你的意见,并枚举用户的组成员... – g1500

在C#(在用户实际进入Windows机器之前执行我的代码)登录的用户无法使用这些方法C++:

看看这个https://msdn.microsoft.com/en-us/library/bb776463.aspx

+0

引用来自问题*我知道如何为当前用户获取此信息。* –

+0

由于我正在使用Credential Provider,因此无法使用它。在我的情况下没有当前用户。只有用户名(+相关的域名) – g1500