如何根据用户名/域名检查用户是管理员组的成员
如何知道用户是否为管理员组的成员(如果我拥有的唯一信息是用户名(和域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);
}
在: 但是,因为我处理未在尚未
如果“几乎总是对的”是不够好,你需要递归枚举用户的组成员,看看你是否找不到管理员s组。这不是微不足道的,但它并不是不合理的困难。没有内置的库来为你做。
第一个问题是假设您有足够的权限访问Active Directory以读取所有相关的组。默认情况下,本地系统帐户将能够执行此操作,但您需要禁止系统管理员更改组的安全权限,以使域计算机无法读取组成员资格。
另外,我不确定凭证提供程序运行的是什么安全上下文,因此您可能需要运行单独的服务来代表您列出域成员资格。
第二个问题是,它不包含诸如Everyone,INTERACTIVE等特殊安全主体,但您可能会忽略这些 - 它们中的任何一个成为管理员组的成员都是非常不寻常的。如果您认为有必要,您可以试图包含它们,或者您可以明确禁止系统管理员这样做。
它会可能根据需要更重要的重新架构,以便您不需要做出这个决定,直到您已获得用户的密码。
谢谢!我想我可以按照你的意见,并枚举用户的组成员... – g1500
在C#(在用户实际进入Windows机器之前执行我的代码)登录的用户无法使用这些方法C++:
引用来自问题*我知道如何为当前用户获取此信息。* –
由于我正在使用Credential Provider,因此无法使用它。在我的情况下没有当前用户。只有用户名(+相关的域名) – g1500
你有没有试过cmd-line'net user/domain the_user_id'?它返回了很多东西。 –
管理员权限是什么?文件,服务器,他们在电脑上?你正在运行一个网站,一个Windows应用程序,你是从Windows机器还是unix机器运行它? Theres只是没有足够的信息来帮助您 – BugFinder
Windows使用安全的对象。访问对象(如文件或进程)的需求分别为每个对象设置。没有*“此用户有权访问所有内容”*用户帐户,更不用说可以指示该标志的标志。你为什么不问真正的问题,而不是你的解决方案? – IInspectable