设计基于角色/用户的应用程序安全性

时间:2014-03-23 04:45:56

标签: security permissions roles

我确信很多人已经完成了这项工作,并且正在寻找一些指导来设计一个可以为多个用户处理数据(行级别)安全性的强大,可扩展的应用程序。

我们正在研究一种系统,用户,有些作为个人,有些作为大型团体的一部分,需要访问自己的数据以及其他个人和组织与他们共享的数据。在某些情况下,数据仅供查看共享,在其他情况下,可以使用完整的编辑权限。 即使在同一个组织内,也需要限制用户可以看到组织中其他用户创建的数据。

所以一个非常粗略的例子可能是...... 具有角色X的用户A(个人用户) 具有角色Y的用户B(个人用户) 具有角色Z的用户C(个人用户) 组织AA中具有角色X的用户D和E. 组织AA中具有角色Y的用户F和G

每个用户都可以为我们的系统创建合同。在他们选择与其他个人用户分享合同之前,该合同不得被任何其他人查看,例如A将与用户B或F分享他的合同。 但是,用户A也可能希望与组织AA中的角色Y的所有用户共享他的合同。 同样,共享合同甚至可能意味着允许编辑合同。

我们最初希望为每个用户设置一个单独的架构,以确保数据级别的安全性,但这会使共享变得更加复杂,并且还可能导致1000个架构(这看起来似乎是一个好主意) )。 因此,我们唯一的办法就是将所有数据保留在一个数据库中的一个模式中,并简单地设计一个用户和角色驱动的应用程序级安全模型,该模型可以容纳每个合同所需的所有CRUD权限。听起来这会变得非常复杂并且不那么漂亮"。对于每个合同,我们必须按组织定义用户和角色列表,其中包含每个用户/角色的个人权限。 有人做过这样的事吗?关于良好和安全的应用程序设计的任何建议?

由于

1 个答案:

答案 0 :(得分:0)

以下是对此要求的一些粗略想法

由于您所说的是数据安全控制而不是系统功能/功能访问控制,所以我将重点关注数据访问控制。

访问控制类的结构

  • 您可能希望将所有级别的安全原子视为同一事物,例如: g,它通常以个人/权限/角色/组继承自同一基本原则类的方式定义,然后在概念上,所有访问控制定义都将基于这个基本原则,因此你不要需要知道控件是在角色,组还是用户之上,这将为您提供更多的灵活性和简单的问题。
  • 您可能还希望将原则定义为一种组合/层次结构,例如

    • 为用户A分配RoleA,RoleB,RoleC和PERMISSION2
    • 角色A是RoleC和RoleD的组合
    • RoleC是权限PERMISSION1,PERMISSION2等的组合。

BTW:由于此处的设计非常灵活,因此您需要系统级冲突检查机制来检查

  • 任何分配的所有原则之间的冲突,以确保没有系统级别冲突(例如,roleA定义用户无法更新类型A的文档,而PERMISSION2定义它可以)另一种可能的方法是为不同类型的原理定义优先级,例如,定义的级别USER>角色> PERMISSION。

  • 还有一个功能级别(SOX法律等)冲突检查,以确保没有功能级别冲突,例如,有能力做付款的人无法访问现金等操作)< / p>

访问文档

  • 然后可以定义诸如document / principle / restrict type / restrict operation / restrict start和thru date之类的模式来存储每个文档的数据访问控制,

    • 文件可以是合同,采购订单,购买请求等,它的实际类型在这里根本不重要。
    • 原则可以是用户/权限/角色/组等,您也不想在此处关注实际的原则类型,通过这种设计,这些普通文档只需要一行数据(因为我们可以在角色级别定义它,如果用户选择与特定组织或个人共享此文档,它也可以处理。
    • 限制类型可能是&#34;允许&#34; /&#34; NOT_ALLOW&#34;等,
    • 限制操作可以是&#34; VIEW&#34; /&#34;更新&#34; /&#34; ADMIN&#34;等,
    • 限制开始和截止日期将是此访问控制生效的日期范围,通过结合我们定义的截止日期,操作和限制类型,您可以将异常访问控制与正常访问控制相结合,从而实现诸如share /之类的要求委派会更容易,也没有为正常的访问控制带来太多复杂。

组织

如果您的组织具有层次结构,您还可以定义如何为父组织和子组织继承访问控制,可能是示例模式,

组织ID / Acccess固有类型/开始和截止日期。

  • 组织ID:此组织的主键
  • 访问固有类型:可以是:ALLOW_ALL_CHILD / ALLOW_ALL_PARENT / ALLOW_ALL_SAME_LEVEL / DENY_ALL等。
  • 开始和截止日期可以是此角色生效并结束的日期。

您可以实现的目标可能是:

  • 对于组织A,其所有子公司不得查看/更新其下的任何文件。
  • 对于组织B,允许其所有子公司对其下的所有文档具有查看/更新权限,但不允许对同一层次结构级别的文档具有查看/更新权限。

然后,您可以组合此组织级访问控制和文档级访问控制,在评估规则时,文档级访问控制的优先级始终高于组织级访问控制。