基于我的粗略阅读,ABAC,即基于属性的访问控制,归结为将属性附加到主题、资源和其他相关实体(例如要对资源执行的操作),然后计算一组布尔值函数来授予或拒绝访问。
具体而言,让我们考虑XACML。
当要访问的资源在到达决策引擎(在XACML中为XACML)之前已知时,这是很好的,例如查看某个帐户的移动号码,在这种情况下,可以使用单个select SQL轻松检索要访问的资源的属性。
但是,考虑一下清单中的银行帐户交易历史记录(每页10个条目)的功能,让我们假设只有帐户所有者才能查看此历史记录,并且事务存储在一个表transaction中的数据库中,如下所示:
transaction_id, from_account_id, to_account_id, amount, time_of_transaction此函数没有访问控制,通常使用如下SQL编写:
select to_account_id, amount, time_of_transaction
from transaction
where from_account_id = $current_user_account_id问题是:如何用XACML来表达这一点?显然,以下方法不实用(由于性能原因):
if from_account_id == account_id then grant else deny我假设会有一些预处理步骤来先获取事务(不需要咨询决策引擎),然后使用获取的事务查询决策引擎,看看它是否有访问权限?
发布于 2022-08-24 04:38:44
您所指的是所谓的“开放端”或以数据为中心的授权i.e.access控制一个未知数目(或大量)的项目,如银行帐户的交易历史记录。通常,ABAC (和XACML或阿尔法)都有一个事务性的决策模型(例如,Alice记录#123?)
值得注意的是,XACML/ALFA中的策略在这两种情况下都不会改变。你仍然会写一些大意如下的东西:
您需要考虑的是如何问这个问题(从PEP到PDP)。有两种方法可以做到这一点:
实际上,我在这个所以贴中写了一个类似的用例。
HTH,大卫
https://stackoverflow.com/questions/73453024
复制相似问题