XACML或DB方法

时间:2014-03-17 04:26:23

标签: xacml xacml3 xacml2

我浏览了XACML文档并解释了如何在XML文件中维护授权策略,同样可以通过将策略保存在数据库中来完成。我的问题是将策略存储在XML文件(如XACML over DB)中的优势是什么?方法,因为在一天结束时它只是解析XML或查询数据库。

2 个答案:

答案 0 :(得分:1)

@ user3405607:如果我理解你的话,你就会质疑"复杂的" XACML标准/规范,当数据库评估引擎将执行"相同"工作

如果是这样,答案是基于数据库的引擎只能为简单规则提供访问控制决策,主要是ACL相关。例如,如果您有资源X,Y,Z和用户A,B,C,您可以设计一个简单的表格,如:

  +----------+----------+----------+
  |    X     |     Y    |    Z     |
  +----------+----------+----------+
A | 1        |  0       |  1       |
  |          |          |          |
B | 1        |  0       |  1       |
  |          |          |          |
C | 0        |  1       |  1       |
  +----------+----------+----------+ 

但是你可以看到这不会扩展。当然,您可以使用基于角色的ACL而不是使用用户 - >资源映射。但同样,这只会迎合简单的规则。

如何处理一个简单的规则"财务部门的用户可以批准订单,如果他不是提出订单的人,并且订单金额低于他的最大批准限额",则假设部门是在Active Directory中捕获的吗?

当然,如果规则中所需的所有细节(部门,订单发行者,金额,最大金额)都​​在数据库中,您可以考虑编写复杂的SQL查询来为您完成工作,但是再次考虑包含的策略规则只会变得更加复杂,很快你就会遇到复杂的策略,这些策略变成了一个复杂的决策树,编写数据库查询将不值得麻烦。

此外,很快你最终将需要编写一个大小合适的代码来执行和解析所有这些查询和响应,实际上这将是XACML文献中称为PDP的实体。

XACML的需求也超出了它,因为它定义了基于标准的策略语言以及请求 - 响应协议。

我建议你阅读一些关于这个问题的基本材料,因为我的解释可能无法正确解决所涉及的复杂性以及需要一个不仅仅依赖于数据库查询的专用评估引擎。

答案 1 :(得分:0)

XACML策略存储库可以是任何东西,数据库或文件系统或任何注册表。但是,如果您考虑群集,安全性,可管理性和性能。我想使用数据库方法很好..让我提供一些理由..

  1. 如果在群集环境中运行多个PDP节点(不同的计算机),则节点很容易指向相同的数据库。然后策略可以由主节点管理,我们不想担心跨其他节点的策略分布。
  2. XACML策略可以包含与之关联的元数据。 Policy Order是与策略关联的元数据之一。如果我们使用基于文件的方法,我们可能需要以单独的方式管理它们。但如果它是一个数据库,它只是在策略表中添加另一列。实际上PDP,可以有一些其他相关的元数据,如策略启用/禁用,策略更新,最后更新时间等。
  3. 如果您没有使用策略缓存,我想最好使用数据库方法。它可能很快。某些数据库可能会提供缓存本身。如果您有元数据,也可以通过单个SQL查询检索它们
  4. 但是,我不认为实际的PDP永远不会为每个请求读取和加载策略。 PDP初始化策略将加载到缓存中。在这种情况下,文件库方法不会出现任何性能问题。但是,如果缓存频繁过期,则可能会加载大多数时间策略。因此,最好采用数据库方法。