实现了基于spring安全框架的安全解决方案,特别是其acl模块。
应用程序中有数以百万计的域对象和数百个用户。
使用Security模块,acl_sid和其他相关表中的条目将增长到10%,这将影响应用程序的性能。
想知道处理这种情况的最佳做法。
是否有其他有效处理类似情况的安全框架。
发布于 2015-11-25 23:42:47
有几个框架可以使访问控制更易于管理。
首先,ACL是伟大的,易于配置,但它们不能很好地扩展。
选项1:基于角色的访问控制(RBAC)
RBAC是NIST在1992年提出的一个著名的模型.许多应用程序和框架实现了RBAC模型。在RBAC中,您为用户提供了一组角色,每个角色都有一组权限。因此,用户继承这些权限。例如,您可以具有查看所有事务的权限的管理器角色。
Spring安全性、Apache、JAAS和许多其他框架(开放源码、商业.)执行成果预算制。
选项2:基于属性的访问控制(ABAC)
有时RBAC是不够的。特别是当您想使用上下文或关系时。例如,在RBAC中,很难实现处理以下内容的角色和权限:
经理可以在他们自己的部门查看交易。
要做到这一点,您可以使用ABAC。您将定义一个角色属性、一个用户部门属性和一个事务部门属性。然后,将这些属性组合到策略中:
具有role==manager的用户可以执行操作==‘视图事务’,如果是user.department==transaction.department
XACML - ABAC的一个实现
eXtensible访问控制标记语言XACML是OASIS定义的标准,越来越多地用于实现复杂的授权挑战。现在有几种实现:
RBAC和ABAC如何减轻管理负担?
在访问控制列表中,每个要保护的项都有一个列表,并且必须在这些列表中插入用户标识。您还可能希望添加操作数据,以便以下列方式结束:
如果您有100万项和10,000个用户,则可能有100万x10kx3操作(读、写、删除)=总计300亿行。这既相当于管理上的噩梦,也可能是性能问题。
现在,RBAC的想法是简化一点。我们使用角色和权限作为间接级别,而不是将用户分配给ACL中的项。这样爱丽丝就能当编辑了。鲍勃和卡罗尔会是观众。您的ACL现在更简单了:
名单越来越小。然而,RBAC仍然存在一些问题。每个对象仍然必须有一个ACL。如果您有一百万个对象,那么仍然有几百万行(仍然比300亿行更好)。
对于ABAC,您选择使用对象属性,例如部门或分类。对象不再具有ACL,您将编写使用这些属性的策略。这使得策略的数量更小(通常是数百个)。
多亏了属性,ABAC的比例更好。
https://stackoverflow.com/questions/33917255
复制相似问题