组和角色之间有啥区别?
Posted
技术标签:
【中文标题】组和角色之间有啥区别?【英文标题】:What's the difference between groups and roles?组和角色之间有什么区别? 【发布时间】:2011-04-16 15:30:57 【问题描述】:除了组之外,许多身份管理实现还使用角色。它们有何不同?到目前为止,我还没有找到一个令人信服的用例来将两者分开。我读过的所有解释都含糊不清。
你能举一个很好的例子,说明角色和组是必要的吗?
【问题讨论】:
Group vs role (Any real difference?)的可能重复 @Swati 这个问题比您指定的 SO 问题更早提出。 @BuhakeSindi,“可能重复”是一种清理方法 - 关闭类似问题并保留最佳答案。日期不是必需的。见meta.stackexchange.com/questions/147643/…如果你同意它需要澄清,请投票meta.stackexchange.com/questions/281980/… 【参考方案1】:角色是一组权利。
群组是一组人。
假设您有 2 组人(G1、G2)使用一个应用程序 (A1),您有两种类型的用户:管理员和只读用户。
您可以在 A1 上创建一个 admin 角色,定义其权限并赋予 G1 这个角色。 如果 G2 也需要这些权限,您不必一一授予,只需将您为 G1 创建的角色赋予 G2 即可。
【讨论】:
除了@vc 74 角色是功能术语。正如 vc 74 所说,小组是一群人,但角色是一群人有资格执行的功能。 所以角色 = 用户和管理员,那么 G1 和 G2 是什么? 角色可以是用户和管理员,但 G1 和 G2 代表一群人,例如 G1 包含 John Smith 和 Agatha Christie,G2 包含 Bod Green、Mike Patton 和 Alicia Keys。那么管理员角色可以定义为:可以将用户添加到应用程序中,可以从应用程序中删除用户,可以更改主页颜色。创建此角色后,您可以将其授予 G1,John Smith 和 Agatha Christie 将拥有这些权利 @vc 那么为什么不把组和角色混为一谈呢?管理员组/角色 = John Smith,Agatha Christie,用户组/角色 = Bod Green,Mike Patton,Alicia Keys。所以它是多余的在这个例子中。 如果组可以包含组怎么办;一组组。这将具有所有好处,但更灵活,因为您可以拥有“角色组”。诚然,增加的灵活性可能会被滥用来造成复杂的混乱。但是,在这种情况下,组合角色和组是一种选择吗?【参考方案2】:我们在应用程序实现中使用组的趋势是关注组与用户之间的关联,而不是实际的组。我已经看到了几个实现(并且我自己很早就这样做了),只检查组的名称。
这显然有点问题,因为每个应用都会定义自己的权限,导致系统中权限提升,权限不一致。
角色与角色有明确的关联,并且这些关联会在中心位置发生变化。这变得更加一致,并且可以由管理员管理所有应用程序。
从概念上讲,组和角色的概念可以互换,但在实施过程中可能难以管理
这里有更多信息:
https://csrc.nist.gov/projects/role-based-access-control/faqs#:~:text=As%20normally%20implemented%2C%20a%20group,groups%20to%20which%20they%20belong.&text=RBAC%20requires%20all%20access%20through,roles%2C%20not%20directly%20to%20users.
【讨论】:
【参考方案3】:在设计 SAAS 时,角色、用户类型通常被视为彼此重合。
用户 - 在组织中工作的人 [某些情况下不需要] 出于某种目的在应用程序中使用 /logs
如果他在组织中工作,用户将拥有 [ 名称 - 纯粹是为了薪资/领导层级的观点] 对于指定,他可能在一个部门工作,在那里他扮演一个角色
这就是现实世界
从应用程序的角度来看 [指定 - 可以根据应用程序用户的需要被视为类型或适当地] 您希望他如何在应用程序中被看到以进行报告,或在 UI 中与他联系。可以是用户类型
角色 - 他需要访问或看到的所有功能都可以归类为逻辑角色 - 这不需要总是与组织角色匹配[但是,如果你可以达到一二一,那就没有了]
这种将服务分组为逻辑角色纯粹是为了访问视角。
管理员用户
编辑器
批准后 -金融家
审核员
不要将 RBAC 的角色与组织中的用户角色混淆 [然而它可以保留,但实际上不会那样发生]
[![在此处输入图片描述][2]][2]
【讨论】:
【参考方案4】:对我来说,“组”和“角色”之间的区别在于Cardinality
组不能包含组。但是一个角色可以包含角色。
我喜欢 PostgreSQL 处理它的方式:来自Database Roles and Privileges
一个角色可以被认为是一个数据库用户或一组数据库用户,这取决于角色的设置方式
这意味着使用角色可以使应用程序更简单、更灵活。想象一个问题跟踪工具。使用角色的外键,您可以处理两种情况:您可以引用一个人或多个人。
【讨论】:
在许多系统中,一个组可以包含一个组,所以这不是真的。我的组可能是“London Office”,其中可能包含一个组“London Sales”和另一个组“London Customer Support”。恕我直言,不允许组包含组将是低效且毫无意义的,否则当新人开始或离开时,工作可能会重复。 我使用的系统(Linux、Django)没有递归组。 以上定义来自 PostgreSQL 文档。有人说角色是一组权利。如果权限是递归的(权限可以包含权限),则不需要“角色”一词。【参考方案5】:所有 cmets 都缺少一个重要的事实,即您也可以将角色分配给单个用户,而不仅仅是组。
这是一个用例: 大学物理教授对特定课程或一组课程具有“成绩测试”角色(又称权利或特权)。然而,他决定休假一年,并希望另一位讲师(或者可能是几位讲师 - 一个小组),即他的替代者,在同一组课程中拥有相同的角色(特权)。请注意,代课教师可能属于不同的用户组。管理员可以轻松地将相关角色分配给单个用户或用户组。 当然,终身教授回来后,管理员可以撤销那些角色(权限)。
从系统的角度来看,我们只关心允许用户(或一组用户)执行哪些方法。在执行受限方法之前,我们通过调用通常返回布尔值的其他方法来检查用户角色。
【讨论】:
【参考方案6】:人员 - 组 - 角色
一个人是一个或多个组的成员。 一个组被分配了多个角色。例子:
stock_purchaser、timecard_supervisor 系统中存在两个角色。 shift_supervisor、regional_manager 系统中存在两个组。 regional_manager 具有 stock_purchaser 和 timecard_supervisor 角色。 shift_supervisor 具有 timecard_supervisor 角色。如果创建了新角色(例如 review_leave_requests) - 可以将其添加到所有需要此角色的组中。在只有角色的系统中,将角色添加到所有需要它的人可能是一项艰巨的任务。
【讨论】:
请不要忘记角色可以是另一个角色的成员。人员 - 组 - 角色 - RoleOfRole - 角色 在查看 Windows 组时,完全有可能在这方面产生很大的混淆。在查看广告组是否与角色相关并看到this answer 时,我遇到了这个答案。WindowsPrincipal.IsInRole(string role)
上的文档状态; “确定当前主体是否属于具有指定名称的 Windows 用户组。”我认为这意味着 Windows 是上述描述的一个例外?!?
@MrMoose 角色和组在技术上的工作方式相同(尽管操作系统如果想要友好,可以做出区分)。为了使它们切实可行,您必须做出区分。以上是关于组和角色之间有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章