基于角色的访问控制 + 基于数据所有权的权限

信息安全 访问控制 rbac 授权
2021-08-24 08:29:05

是否有一种通用系统或模式将 RBAC 系统中的角色赋予的权限与与数据所有权相关的权限相结合?

例如:

Bob 是一名医生,并且具有“查看患者详细信息”特权的角色,
但前提是“将患者分配给 Bob 医生”

上面的示例将关系放在 Actor 上(在这种情况下是 Bob 医生),但我实际上是在寻找基于组的解决方案:

例如:

Bob 是一名医生,具有“查看、患者详细信息”特权的角色
Bob 是“A”组的成员。
Bob 可以查看分配到“A”组的患者的所有患者详细信息

我的问题是
是否有任何通用的访问模型可以完成上述操作?

我发现的答案摘要
对于这种情况,似乎有两个或多或少相关的解决方案:参数化 RBAC (pRBAC) 和对象敏感 RBAC (ORBAC)。据我所知,pRBAC 解决方案比 ORBAC 产生了更多的兴趣。在我看来,它也是两种解决方案中更优雅、更灵活的一种。

还有其他一些研究旨在解决相同的访问控制问题,但这些研究旨在用其他类型的访问控制模型替换 RBAC。

4个回答

这是一个非常好的问题,它已被确定为 RBAC 的问题之一。有一系列关于参数化角色的研究(pdf 可以在网上找到),最近,出现了基于关系的访问控制的想法(参见 P. Fong 等人的工作,例如这个)。我不确定已经实施了多少。

您可以配置现代多级安全 (MLS) 产品来解决该问题。这些系统专为共享基础设施上的军用级数据保护而设计。通常,系统使用基于安全标签的基于角色的访问控制 (RBAC)、自主访问控制 (DAC) 和强制访问控制 (MAC)。

安全标签解决了您缺少的元素。在 MLS 系统中,所有对象都有一个包含数据和进程的标签。标签提供了解决您的医生和特定群体情况的方案。

这是一个示例配置。主标签集(称为系统编码)包括一个标签方案,该方案具有针对所有相关医生组的单独组。所有医生使用的应用程序可能会受到您提到的 RBAC 控件的限制。每个医生的帐户资料中也有其唯一的安全标签,因此只能访问该标签定义的数据。

初始配置很繁重,但您可以获得大量其他有用的功能,例如控制在哪个打印机上打印哪个文档(想想硬件限制,就像医生组限制一样)。

MLS 的 Wikipedia 页面提供了供应商(当不在 SOPA 停电时)。根据您的问题,Oracle 的 Trusted Extensions 产品在线提供了一些很好的商业用例示例。

Exchange 2010 使用了类似的模式;其中访问模型使用适用于绑定层的“范围”属性进行限制。在此实现中,Scope 是经过身份验证的用户与“患者”所在的 OU 之间的“关系”。

Exchange 2010 有一个委派模型,其中winrm Powershell cmdlet 组基本上被分组为角色,并将角色分配给用户。

交换角色图像图片来源

考虑到我可以如何利用 PowerShell 的所有优势,同时使用正确的低级技术(WCF、SOAP 等),并且在客户端不需要额外的软件,这是一个伟大而灵活的模型。

Exchange 2010 远程管理的工作原理图图片来源

这是一个非常现代的应用程序设计,我正在尝试自己模仿它。 我在这里对 StackOverflow 有类似的问题

我意识到这个问题已经有将近 4 年的历史了。答案,尤其是 userxxxxx 给出的答案,很棒。

从那时起,一种新的访问控制范式已经成熟并解决了 RBAC 的缺点。它称为基于属性的访问控制 (ABAC),让您可以在策略中使用这些属性来表达关系。策略语言基于称为 XACML(可扩展访问控制标记语言)的标准。

如果我们重新审视 OP 的场景

Bob 是一名医生,拥有“查看患者详细信息”权限

Bob 是“A”组的成员。

Bob 可以查看分配到“A”组的患者的所有患者详细信息

在 ABAC 中重写的方式是:

如果患者分配的组在医生组列表中,则具有角色 == 医生的用户可以对类型 == 患者详细信息的对象执行操作 == 查看。

使用ALFA作为符号,你得到

namespace healthcare{
    policyset viewMedicalRecords{
        target clause actionId == "view" and object.nature == "patient details"
        apply firstApplicable       
        policy doctors{
            target clause user.role=="doctor"
            apply firstApplicable
            rule allowSameGroup{
                permit
                condition patient.group == doctor.group
            }
        }       
    }
}

您可以在 NIST(美国国家科学与技术研究所)网站上阅读有关 ABAC 的更多信息他们也定义了 RBAC。