角色和组之间的区别来自于计算机安全概念(而不仅仅是资源管理)。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模型(以及与基于身份的组有关的传递性)的限制。
希望这能帮到您。
=======================
在看到Simon的回答后,我想补充一些内容。角色可以帮助您管理权限,而组可以帮助您管理对象和主体。此外,人们可以将角色视为“上下文”。角色“X”可以描述一个安全上下文,规定了主体Y如何访问(或不访问)对象Z。
另一个重要的区别(或理想状态)是有一个角色工程师,即负责设计应用程序、系统或操作系统所需和/或明显的角色和上下文的人员。角色工程师通常也是角色管理员(或系统管理员),但并非必须如此。此外,角色工程师真正的角色(没有双关语)在于安全工程领域,而不是管理。
这是由RBAC正式形成的一种新型组,尽管它很少被使用,但通常在具备组功能的系统中并不存在。