如何检查给定用户是否是内置Administrators组的成员?

时间:2008-09-09 16:09:23

标签: .net security

我需要以编程方式(在.NET中)检查给定用户(域帐户)是否是当前计算机(执行应用程序的那个)上的内置Administrators组的成员。

有可能吗?

4 个答案:

答案 0 :(得分:2)

我不知道.Net,但在win32中,简单的方法是调用IsUserAnAdmin()。如果您需要更多控制权,可以打开流程令牌并使用CheckTokenMembership查看您需要检查的每个群组

修改:有关.NET示例代码,请参阅pinvoke.net(感谢chopeen)

答案 1 :(得分:2)

有一个Win32 API,您可以P / Invoke:IsUserAnAdmin

问题在Vista上更复杂......请参阅此blog post

答案 2 :(得分:1)

你可以像我在这个答案中所做的那样循环群组:

Determining members of local groups via C#

在阅读了更多内容之后,最简单的方法是使用System.DirectoryServices.AccountManagement命名空间。以下是它的使用方法:

http://www.leastprivilege.com/SystemDirectoryServicesAccountManagement.aspx

样品:

public static bool IsUserInGroup(string username, string groupname, ContextType type)
{
    PrincipalContext context = new PrincipalContext(type);

    UserPrincipal user = UserPrincipal.FindByIdentity(
        context,
        IdentityType.SamAccountName,
        username);
    GroupPrincipal group = GroupPrincipal.FindByIdentity(
        context, groupname);

    return user.IsMemberOf(group);
}

答案 3 :(得分:0)

如果您正在谈论当前正在运行的用户,那么

using System.Security.Principal;

WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal wp = new WindowsPrincipal(identity);

if (wp.IsInRole("BUILTIN\Administrators"))
   // Is Administrator
else
   // Is Not

如果没有,那么我希望可以将身份设置为特定用户,但不会查看如何。