我目前正在评估身份验证/授权框架。
Apache看起来很不错,但我是,缺少行级安全特性。
例如,数据库中可能有特殊的行,只有具有特权的用户才能看到和访问这些行。为了避免不必要的往返,我们目前修改SQL查询,使其与授权数据连接,只获取当前用户的可见行。
但是我觉得这个概念“不对”,因为我们将业务代码与安全相关代码混为一谈,它们应该是正交的、相互独立的。
的结合)?
更新:
目标数据库主要是Oracle 10g/11g
的大缺点,最好采用独立于数据库的解决方案
发布于 2011-04-19 12:30:48
行级安全性实际上最好是在数据库本身中完成。当获取连接时,数据库必须被告知用户上下文是什么。该用户与一个或多个安全组相关联。然后,数据库会自动将过滤器附加到用户提供的查询中,以筛选出从安全组中看不到的内容。这当然意味着这是每种数据库类型的解决方案。
Oracle有相当好的行级安全支持,请参阅http://www.orafusion.com/art_fgac.htm作为示例。
发布于 2013-10-24 12:13:44
我们将其实现为JDBC包装器。这个包装器简单地解析和转换SQL。Hibernate过滤器也是个好主意,但是我们有很多报告和临时查询,Hibernate不是我们应用程序中访问数据的唯一工具。tool解析器是一个优秀的开放源码SQL解析器,但是我们必须对它进行分叉,以修复一些问题,并添加对一些高级SQL特性的支持,例如,出于报告目的,https://github.com/jbaliuka/sql-analytic这个报告工具也可以在github上使用,但是不依赖于行级安全基础设施https://github.com/jbaliuka/x4j-analytic。
发布于 2011-06-05 08:18:56
有一篇有用的文章:http://mattfleming.com/node/243
其思想是可以通过两种方式实现行级功能:直接在存储库中设置限制,或者通过AOP绑定限制。后者是首选的,因为安全层应该与业务逻辑分离(正交关注)。
在Hibernate中,您可以使用过滤器的概念,它是透明地应用的,而且存储库不知道它们。您可以通过AOP添加这样的过滤器。另一种方法是截取session.createCriteria(),并使用AOP透明地向标准添加限制。
https://stackoverflow.com/questions/5716242
复制相似问题