2013-02-28 150 views
1

我有一个独特的困惑。验证用户凭证

我正在开发一个将测试用户帐户权限的类,我已经介绍了大部分基础。但是我最关心的是针对NullSID进行测试。

的原因,我所关心的是:

if(user != null) 
{ 
    role.IsInRole(WindowsBuiltInRole.Administrator); 
} 

显然,一个简单的实现来证明,但将WindowsBuiltInRole检查严格基于个人计算机上或对域?如果用户的域帐户确实是Administrator,它会成功测试吗?

或者更好的方法来测试五个或六个域名SID令牌?其他用户帐户(如网络服务帐户)是否也会以相同方式操作?什么是确保令牌值真实性的最佳方法。

任何输入将是了不起的。

回答

1

的WindowsBuiltInRole枚举正好对应到Windows SIDs,并精确地与Windows内置的组相关精心kwown SIDS:Well-known security identifiers in Windows operating systems,所有SID以 'S-1-5-32-'。

枚举值的整数值对应于sid中的最后一个数字,所以,因为WindowsBuiltInRole.Administrator是544,它对应于S-1-5-32-544。所以你正在使用此代码检查是真的,如果用户属于管理员组:

SID:S-1-5-32-544

名称:管理员

说明:内置组。 初始安装操作系统后,组中唯一的 成员是管理员帐户。当计算机 加入域时,域管理员组将被添加到管理员组 组中。当服务器成为域控制器时,管理员组也会添加到企业管理员组中。

+0

这是一篇很棒的文章,所以默认情况下,'BuiltInRole'比较* Local Machine,Workgroup或Domain *来查看哪些默认的'Roles'属于哪个?但它实际上使用'SID令牌'。 – Greg 2013-04-01 21:04:35

+0

该检查在管理员组上完成,因此它完全取决于您正在运行代码的计算机在该组中的内容。而已。使用的底层Windows API仅仅是CheckTokenMembership http://msdn.microsoft.com/en-us/library/windows/desktop/aa376389.aspx和相应的SID。 – 2013-04-02 06:03:35

+0

谢谢,我不知道我是如何错过的,当时我正在寻找有关处理它的理想方式的答案。你虽然赚了。 – Greg 2013-04-02 15:13:28

1

通过WindowsBuiltInRole枚举的定义,发现了在:

WindowsBuiltInRole Enumeration

的WindowsBuiltInRole.Administrator作用确实适用于计算机和域没有任何限制。

WindowsBuiltInRole.PowerUser将能够运行应用程序,但无法安装或卸载的东西。

WindowsBuiltInRole.AccountAdministrator可能会管理帐户甚至更改权限,但不会进行域范围的更改(如在分布式部署中)。

WindowsBuiltInRole.BackupOperator可以替代安全限制,仅用于备份或还原文件的唯一目的。

WindowsBuiltInRole.Replicator支持域中的文件复制。

这些不同的角色可能看起来很模糊,但可以推断除Administrator之外的所有人都可以完成一些管理员任务,但不是全部。

+0

但是另一个'BuiltInRole'帐户呢?他们是否跨越“域名”? – Greg 2013-03-29 15:36:15

+0

我扩大了答案,希望它是令人满意的。其他角色有一些类似管理员的权限,不是全部。 – 2013-03-30 00:07:19