我有一个独特的困境。
我正在开发一个将测试用户帐户权限的类,我已经涵盖了大部分基础。但我最关心的是对Null
或SID
进行测试。
我担心的原因是:
if(user != null)
{
role.IsInRole(WindowsBuiltInRole.Administrator);
}
显然是一个简单的实现来演示,但WindowsBuiltInRole
是否会严格根据单个机器或域进行检查?如果用户域帐户确实是管理员,它是否会成功测试?
或者更好的方法来测试五个或六个域SID
令牌?其他用户帐户(例如网络服务帐户)是否会以相同的方式操作?什么是确保令牌值真实性的最佳方法。
任何输入都会很棒。
答案 0 :(得分:1)
通过以下位置找到WindowsBuiltInRole枚举的定义:
WindowsBuiltInRole Enumeration
WindowsBuiltInRole.Administrator角色确实适用于计算机和域,没有任何限制。
WindowsBuiltInRole.PowerUser将能够运行应用程序,但无法安装或卸载内容。
WindowsBuiltInRole.AccountAdministrator可以管理帐户甚至更改权限,但不会进行域范围的更改(如在分布式部署中)。
WindowsBuiltInRole.BackupOperator可以覆盖安全限制,仅用于备份或恢复文件。
WindowsBuiltInRole.Replicator支持域中的文件复制。
这些不同的角色可能看起来很模糊,但可以推断,除管理员之外的所有角色都可以执行一些管理员任务,但不是全部。
答案 1 :(得分:1)
WindowsBuiltInRole枚举完全对应于Windows SIDs,并且恰好与与 Windows内置组:Well-known security identifiers in Windows operating systems相关联的完善的SIDS,所有SID以'S-1-5-32 - '。
枚举值的整数值对应于sid中的最后一个数字,因此,因为WindowsBuiltInRole.Administrator是544,所以它对应于S-1-5-32-544。因此,如果用户属于Administrators组,那么使用此代码进行检查的确是如此:
SID:S-1-5-32-544
名称:管理员
描述:一个内置组。 初次安装操作系统后,唯一的 该组的成员是管理员帐户。当一台电脑 加入域,Domain Admins组将添加到管理员 组。当服务器成为域控制器时,企业 管理员组也会添加到管理员组。