谷歌是你的朋友 :)
无论如何,角色和组之间的区别来自计算机安全的概念(而不是简单的资源管理)。Ravi Sandhu 教授对角色和群体之间的语义差异进行了开创性的报道。
http://profsandhu.com/workshop/role-group.pdf
组是具有分配给组的给定权限集的用户集合(并且可传递给用户)。角色是权限的集合,当用户在该角色下操作时,他有效地继承了这些权限。
通常,您的组成员身份在您登录期间保持不变。另一方面,可以根据特定条件激活角色。如果您当前的角色是“医务人员”,您可能能够查看给定患者的一些医疗记录。但是,如果您的角色也是“医生”,那么您可能会看到超出“医务人员”角色的人所能看到的其他医疗信息。
角色可以通过一天中的时间、访问位置来激活。角色也可以与属性增强/关联。您可能以“医生”的身份进行操作,但如果您没有“主治医师”属性或与我(具有“患者”角色的用户)没有关系,那么您将无法查看我的全部病史。
你可以用组来做所有这些,但同样,组倾向于关注身份,而不是角色或活动。并且刚刚描述的安全方面的类型往往更适合后者而不是前者。
在许多情况下,为了将事物分类在一起(仅此而已),组和角色的功能相同。然而,团体是基于身份的,而角色是为了划分活动。不幸的是,操作系统倾向于模糊区分,将角色视为组。
您会看到应用程序或系统级别的角色有更清晰的区别 - 承载应用程序或系统特定的语义(如Oracle 角色) - 与在操作系统级别实现的“角色”(通常与组同义)相反。
角色和基于角色的访问控制模型可能存在限制(当然就像任何东西一样):
http://www.lhotka.net/weblog/CommentView,guid,9efcafc7-68a2-4f8f-bc64-66174453adfd.aspx
大约十年前,我看到了一些关于基于属性和基于关系的访问控制的研究,它们提供了比基于角色的访问控制更好的粒度。不幸的是,我多年来在该领域没有看到太多活动。
角色和组之间最重要的区别是角色通常实现强制访问控制 (MAC) 机制。您无法将自己(或其他人)分配给角色。角色管理员或角色工程师会这样做。
这在表面上类似于 UNIX 组,用户可以/可能能够将自己分配给一个组(当然是通过 sudo)。但是,当根据安全工程过程分配组时,区别有点模糊。
另一个重要特征是真正的 RBAC 模型可以提供互斥角色的概念。相反,基于身份的组是相加的——委托人的身份是组的总和(或合取)。
基于真正 RBAC 的安全模型的另一个特征是,为特定角色创建的元素通常不能被不以该角色行事的人传递访问。
另一方面,在自由访问控制 (DAC) 模型(Unix 中的默认模型)下,您无法单独使用组获得这种类型的保证。顺便说一句,这不是组或 Unix 的限制,而是基于身份的 DAC 模型的限制(以及基于身份的组的传递。)
希望能帮助到你。
========================
在看到西蒙的好回应后添加了更多内容。角色可帮助您管理权限。组可帮助您管理对象和主题。此外,可以将角色视为“上下文”。角色“X”可以描述一个安全上下文,该上下文规则主体 Y 如何访问(或不访问)对象 Z。
另一个重要的区别(或理想)是角色工程师,即设计角色、上下文的人,这些角色在应用程序、系统或操作系统中是必要的和/或明显的。角色工程师通常是(但不一定是)角色管理员(或系统管理员)。此外,角色工程师的真正角色(不是双关语)是在安全工程领域,而不是管理领域。
这是一个由 RBAC 形式化的新组(即使它很少被使用),通常不会出现在具有组功能的系统中。