对于 ABAC/XACML,您如何保护 reports/large 结果集中的资源?
With ABAC/XACML how do you protect resources in reports/large result sets?
当 运行 报告甚至只是从数据库中选择多条记录时,人们如何使用 abac 方法?
例如,如果您的政策规定:
Doctors can only view patients in their hospital
显然,实现这一点的有效方法是在查询中包含一个过滤器 (where hospital = XXX
),但这似乎违反了 ABAC 的原则,因为它将规则烘焙到 SQL本身。
我知道 Axiomatics 提供了一种反向查询机制,显然可以根据规则为您生成过滤器——但我的系统有很多复杂的 sql 需要重构很多来处理这个。
其他人是如何处理这个问题的?
基本上可以通过三种方式解决这个问题:
- 通过您提到的反向查询机制。这确实目前只有 Axiomatics 支持。反向查询背后的想法是,而不是指定一个完整的问题,例如
"Can Alice view document #123?"
,您可以指定一个开放式问题,例如"Which documents can Alice view?"
.
- 通过 XACML 3.0 的多重决策配置文件,您可以一次性提出多个问题,例如"Can Alice view Doc #1, #2, #3?"。 MDP 最多适用于数百个项目。您可以将它与分页策略结合起来。您可以阅读更多关于 MDP here.
- 通过使用义务。您可以编写一项政策,规定作为一个整体,医生有权查看医疗记录 + 有义务执行过滤 SQL 语句。这种方法的问题在于它将授权语义置于义务内而不是政策内。另外,如果触发了多项义务怎么办?
当 运行 报告甚至只是从数据库中选择多条记录时,人们如何使用 abac 方法?
例如,如果您的政策规定:
Doctors can only view patients in their hospital
显然,实现这一点的有效方法是在查询中包含一个过滤器 (where hospital = XXX
),但这似乎违反了 ABAC 的原则,因为它将规则烘焙到 SQL本身。
我知道 Axiomatics 提供了一种反向查询机制,显然可以根据规则为您生成过滤器——但我的系统有很多复杂的 sql 需要重构很多来处理这个。
其他人是如何处理这个问题的?
基本上可以通过三种方式解决这个问题:
- 通过您提到的反向查询机制。这确实目前只有 Axiomatics 支持。反向查询背后的想法是,而不是指定一个完整的问题,例如
"Can Alice view document #123?"
,您可以指定一个开放式问题,例如"Which documents can Alice view?"
. - 通过 XACML 3.0 的多重决策配置文件,您可以一次性提出多个问题,例如"Can Alice view Doc #1, #2, #3?"。 MDP 最多适用于数百个项目。您可以将它与分页策略结合起来。您可以阅读更多关于 MDP here.
- 通过使用义务。您可以编写一项政策,规定作为一个整体,医生有权查看医疗记录 + 有义务执行过滤 SQL 语句。这种方法的问题在于它将授权语义置于义务内而不是政策内。另外,如果触发了多项义务怎么办?