我有一个独特的困境。
我正在开发一个类,将测试用户帐户权限,我已经涵盖了大多数基础。但我最关心的是对Null
或SID
的测试。
我担心的原因是:
if(user != null)
{
role.IsInRole(WindowsBuiltInRole.Administrator);
}
显然是一个简单的实现来演示,但是WindowsBuiltInRole
检查是否严格基于单个机器或针对域?如果用户的域帐户确实是Administrator,测试是否成功?
或者更好的方法是针对五个或六个域SID
令牌进行测试?其他用户帐户(如网络服务帐户)是否会以同样的方式操作?确保令牌值的真实性的最佳方法是什么?
WindowsBuiltInRole枚举精确地对应于Windows sid,并且精确地对应于与Windows内置组相关联的众所周知的sid: Windows操作系统中众所周知的安全标识符,所有sid以'S-1-5-32-'开头。
枚举值的整数值对应sid中的最后一个数字,因此,因为WindowsBuiltInRole。管理员为544,对应S-1-5-32-544。这段代码检查的是用户是否属于Administrators组:
席德:s - 1 - 5 - 32 - 544
名称:管理员
Description:内置组。初始安装操作系统后,只有组成员为Administrator帐户。当一台电脑加入域后,domain Admins组加入到Administrators组中组。当服务器成为域控制器时,EnterpriseAdmins组也被添加到Administrators组中。
根据WindowsBuiltInRole的定义:
WindowsBuiltInRole枚举
WindowsBuiltInRole。管理员角色确实适用于计算机和域,没有任何限制。
WindowsBuiltInRole。PowerUser将能够运行应用程序,但不能安装或卸载东西。
WindowsBuiltInRole。AccountAdministrator可以管理帐户甚至更改权限,但不能进行域范围的更改(如在分布式部署中)。
WindowsBuiltInRole。BackupOperator可以超越安全限制,仅用于备份或恢复文件。
WindowsBuiltInRole。Replicator支持域内文件复制。
这些不同的角色可能看起来很模糊,但可以推断,除了Administrator之外,所有角色都可以执行一些Administrator任务,但不是全部。