访问数据库对象的精细授权

时间:2018-04-27 08:34:53

标签: architecture authorization access

以下用例示例的最佳架构方法是什么:

  1. 域模型包含公司,部门和职位。
  2. 公司可以有多个部门。部门可以有多个职位。
  3. 任何用户都可以为每个实体拥有三个权限级别 - "管理员","写"或"阅读"。
  4. 如果用户有"管理员"访问公司 - 然后他拥有任何子实体的管理员权限。如果用户有"写"访问部门然后部门中的任何职位继承该访问权限。
  5. 对象必须存储在持久存储中,如关系数据库或文档数据库。
  6. 据我所知,OAuth范围不适用于上述用例。 一种方法是将所有数据(包括权限)存储在关系数据库中,并且每次使用连接进行查询。 另一种方法是使用一些像LDAP这样的外部系统来存储实体之间的关系并管理它们的权限。实体本身仍存储在某个数据库中。

    由于显而易见的原因,上述两种选择看起来都不太吸引人。在第一种情况下,您最终会有太多的连接。在第二种情况下,您可能很难跨两个系统管理数据完整性。而且,它违反了单一的事实原则。

    用例必须是软件开发的典型用例,但我没有找到任何"最佳实践"这个用例的建议。 我将不胜感激任何有关外部资源的建议或参考。

1 个答案:

答案 0 :(得分:1)

最佳做法是使用外部授权管理(EAM)。

  

外化授权管理提供了一种更精细的方式来管理组织内的访问。 (Gartner的)

EAM为您提供:

  • 基于属性的访问控制(ABAC)即使用用户,资源,操作和上下文的参数(属性)的访问控制,而不仅仅是根据角色定义访问控制或权限
  • p 基于olicy的访问控制,即一组将属性汇总在一起并定义可以或不可以发生的内容的策略。例如:
    • 经理可以查看自己的公司资料。
    • 如果公司资料仅供参考,则无法编辑公司资料。

特别是,ABAC为您提供了一种体系结构,可以将要保护的层(应用程序,数据库中的数据......)与授权逻辑分离。这意味着您可以独立于授权改进您的应用程序,反之亦然。 XACML是ABAC的事实上的实施。

您的所有要求最终都被表达为政策。