对于 ABAC/XACML,您如何保护 reports/large 结果集中的资源?

With ABAC/XACML how do you protect resources in reports/large result sets?

当 运行 报告甚至只是从数据库中选择多条记录时,人们如何使用 方法?

例如,如果您的政策规定:

Doctors can only view patients in their hospital

显然,实现这一点的有效方法是在查询中包含一个过滤器 (where hospital = XXX),但这似乎违反了 ABAC 的原则,因为它将规则烘焙到 SQL本身。

我知道 Axiomatics 提供了一种反向查询机制,显然可以根据规则为您生成过滤器——但我的系统有很多复杂的 sql 需要重构很多来处理这个。

其他人是如何处理这个问题的?

基本上可以通过三种方式解决这个问题:

  1. 通过您提到的反向查询机制。这确实目前只有 Axiomatics 支持。反向查询背后的想法是,而不是指定一个完整的问题,例如"Can Alice view document #123?",您可以指定一个开放式问题,例如"Which documents can Alice view?".
  2. 通过 XACML 3.0 的多重决策配置文件,您可以一次性提出多个问题,例如"Can Alice view Doc #1, #2, #3?"。 MDP 最多适用于数百个项目。您可以将它与分页策略结合起来。您可以阅读更多关于 MDP here.
  3. 通过使用义务。您可以编写一项政策,规定作为一个整体,医生有权查看医疗记录 + 有义务执行过滤 SQL 语句。这种方法的问题在于它将授权语义置于义务内而不是政策内。另外,如果触发了多项义务怎么办?