7

我正在尝试了解基于 RBAC 模型的访问控制。我参考了以下链接。

NIST RBAC 数据模型

如摘录中所述,我还没有清楚地理解这部分-

*“每个会话是一个用户到可能的多个角色的映射,即,用户建立一个会话,在该会话期间用户激活分配给他或她的角色的某些子集。每个会话与单个用户相关联,每个用户是与一个或多个会话相关联。函数 session_roles 为我们提供了由会话激活的角色,函数 user_sessions 为我们提供了与用户关联的一组会话。用户可用的权限是分配给角色的权限在所有 user.s 会话中激活。"*

问题- 如何使用会话来激活角色?用户/组和角色之间的关系作为管理员数据插入。那么,会话如何为用户激活角色子集?

PS -> 我早些时候在这里问过这个问题,但没有答案。可能是这个问题太基本了,但我很想理解它。任何用例或链接肯定会有所帮助。

谢谢你的时间。

4

2 回答 2

6

在 RBAC 中,管理员通过将权限分配给角色以及另外将角色分配给用户来授予权限。如您所知,要使用户能够使用特定权限,他必须被分配至少一个提供所述解决方案的角色。

所以每个用户都有一组分配给他的角色。在会话期间,他可以选择激活(或停用)这些角色中的任何一个,但不能选择其他角色。激活的角色确定在会话期间的给定时间用户可以使用哪些权限。这很有用,例如,对于职责约束的动态分离,两个角色 A 和 B 可以分配给同一个用户 U,但不能一起使用。因此,如果 U 想使用 A,他必须在激活 A 之前停用 B。

于 2012-12-03T13:43:03.970 回答
1

根据我实施 RBAC 的经验,我几乎避免使用多会话的动态管理。

起初,这听起来像是一个非常简洁和灵活的想法,但是当您询问谁激活/停用角色(以及何时)时,我意识到复杂性和安全风险不值得付出努力(我个人的看法)。

这里要理解的重要事情以及@Imontriux(上面)提到的事情:

“这很有用,例如,对于动态职责分离约束,两个角色 A 和 B 可以分配给同一个用户 U,但不能一起使用。因此,如果 U 想使用 A,他将有在激活 A 之前停用 B。”

大多数时候,必须应用职责分离约束,为了兑现这一点,我只是选择一次只拥有/管理每个用户的一个有效会话。如果用户想在不同的角色集下进行身份验证,他/她负责注销和重新登录。

它几乎简化了我的很多代码。这是我选择的妥协,可以轻松接受。

于 2014-02-09T05:53:36.763 回答