群组和角色有什么区别?

21

很多身份管理实现除了使用组外,也会使用角色。它们有何不同?到目前为止,我还没有发现分离这两者的必要性的令人信服的用例。我读过的所有解释都很模糊。

您能否给出一个需要同时拥有角色和组的好例子?


1
可能是Group vs role (Any real difference?)的重复问题。 - Swati
@Swati,这个问题比你指定的SO问题早被问过了。 - Buhake Sindi
1
@BuhakeSindi,“可能是重复问题”是一种清理方式-关闭类似的问题并保留最佳答案。日期不是必要的。请参见http://meta.stackexchange.com/questions/147643/should-i-vote-to-close-a-duplicate-question-even-though-its-much-newer-and-ha 如果您认为需要澄清,请在http://meta.stackexchange.com/questions/281980/add-clarification-link-to-possible-duplicate-automated-comment上投票。 - Michael Freidgeim
5个回答

26

角色是一组权限。

群组是一组人。

假设您有两个使用应用程序(A1)的人群(G1,G2),其中有两种类型的用户:管理员和只读用户。

您可以创建一个在A1上的管理员角色,定义其权限并将此角色授予G1。如果G2也需要这些权限,您不必逐个授予它们,只需向G2提供您为G1创建的相同角色即可。


在@vc 74的基础上,角色是功能术语。正如vc 74所说,组是人群,但角色是人群可以胜任的职能。 - bahadir arslan
那么,角色是用户和管理员,那么G1和G2会是什么? - Alex B
2
角色可以是用户和管理员,但G1和G2代表人群组,例如G1包含John Smith和Agatha Christie,G2包含Bod Green、Mike Patton和Alicia Keys。然后,管理员角色可以被定义为:可以向应用程序添加用户,可以从应用程序中删除用户,可以更改主页面颜色。一旦创建了此角色,您可以将其授予G1,John Smith和Agatha Christie将拥有这些权限。 - vc 74
@vc 那为什么不将组和角色合并呢?管理员组/角色 = {John Smith, Agatha Christie},用户组/角色 = {Bod Green, Mike Patton, Alicia Keys}。所以在这个例子中是多余的。 - Alex B
@Alex,不是这样的。想象一下另一组用户(G2)需要成为应用程序的管理员的情况。您无需再次定义权限集。此外,更重要的是,相同的用户组可以在不同的应用程序中重复使用。 - vc 74
1
如果群组可以包含群组,即一组群组。这将具有所有的好处,但更加灵活,因为您可以拥有“角色群组”。不可否认,增加的灵活性可能会被滥用,从而创建一个复杂的混乱。但是,在这种情况下,将角色和群组结合起来是否是一个选项? - Buttons840

24

人员 - 组 - 角色

  • 一个人可以是一个或多个组的成员。
  • 一个组可以被分配多个角色。

示例:

  • 系统中存在两个角色:stock_purchasertimecard_supervisor
  • 系统中存在两个组:shift_supervisorregional_manager
  • regional_manager 拥有 stock_purchasertimecard_supervisor 两个角色。
  • shift_supervisor 拥有 timecard_supervisor 一个角色。

如果创建了新的角色(例如review_leave_requests),则可以将其添加到需要该角色的所有组中。在仅具备角色的系统中,为所有需要该角色的人员添加该角色可能是一项繁琐的任务。


请注意,角色可以是另一个角色的成员。人 - 组 - 角色 - 角色的角色 - 角色。 - AnyOne
当查看Windows组时,围绕此问题存在大量混淆是完全可能的。我在查看AD组是否与角色相关时遇到了这个答案,并看到了这个答案WindowsPrincipal.IsInRole(string role)文档说明:“确定当前主体是否属于指定名称的Windows用户组。”我假设这意味着Windows是上述描述的一个例外?!? - Mr Moose
@MrMoose 从技术上讲,角色和组的工作方式相同(尽管操作系统可以进行区分,如果它想友好一些)。为了使它们在实际中发挥作用,您必须进行区分。 - FastAl

2

所有评论中缺少的一个重要事实是,您可以将角色分配给个别用户,而不仅仅是组。

以下是一个使用案例: 一位大学物理教授在特定课程或一组课程中拥有“成绩测试”角色(也称为权限或特权)。然而,他决定休学一年,并希望另一位教师(或者可能是几位教师 - 一个组),即他的替代者,在同一组课程上拥有相同的角色(特权)。请注意,替代教师可能属于不同的用户组。管理员可以轻松地将相关角色分配给个别用户或用户组。 当然,在终身教授回来后,管理员可以撤销这些角色(特权)。

从系统角度来看,我们只关心用户(或一组用户)允许执行哪些方法。在执行受限制的方法之前,我们通过调用其他通常返回布尔值的方法来检查用户角色。


0

我们在应用程序实现方面的倾向是关注组和用户之间的关联,而不是实际的组。我见过一些实现方式(并且在早期也有过这样做的罪行),只检查组的名称。

这显然有些问题,因为每个应用程序都将定义其自己的权限,导致在系统中提高权限并不一致。

角色与角色具有明确的关联,并且这些关联会在一个中央位置进行更改。这变得更加一致,并可以由管理员为所有应用程序进行管理。

从概念上讲,组和角色的想法可以互换,但在实现上,这可能难以管理。

以下是更多信息:

https://csrc.nist.gov/projects/role-based-access-control/faqs#:~:text=通常情况下,组是指一组用户,这些用户具有相似的职责、任务或特权。RBAC 通过将权限授予角色,然后将角色授予用户组来管理访问控制。这种方法使得管理员可以更容易地管理大量用户,并确保每个用户只能访问其所需的资源。RBAC 要求所有访问都通过角色进行,而不是直接授予用户。


0

对我来说,“组”和“角色”的区别在于基数

一个组不能包含另一个组。但是一个角色可以包含其他角色。

我喜欢PostgreSQL的处理方式:从数据库角色和权限开始

一个角色可以被视为数据库用户或一组数据库用户,这取决于角色的设置方式

这意味着使用角色可以使应用程序更简单、更灵活。想象一下问题跟踪工具。通过对角色的外键引用,您可以处理两种情况:您可以引用单个人或多个人。


3
在许多系统中,一个组可以包含另一个组,因此这并不是真正的限制。我的组可能是“伦敦办事处”,它可能包含一个名为“伦敦销售”的组和另一个名为“伦敦客户支持”的组。如果不允许组包含其他组,那将是低效且毫无意义的,因为当新人加入或离开时,工作可能会被重复。 - Lukos
我使用的系统(Linux,Django)没有递归组。 - guettli
上述定义来自于PostgreSQL文档。有人认为角色是一组权限。如果权限是递归的(一个权限可以包含另一个权限),那么“角色”这个术语就不再需要了。 - guettli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接