代码之家  ›  专栏  ›  技术社区  ›  toolkit

使用java和hibernate的数据“安全性”

  •  6
  • toolkit  · 技术社区  · 16 年前

    我目前使用的系统需要一些基于角色的安全性,这在JavaEE堆栈中得到了很好的满足。该系统旨在成为一个框架,供业务领域专家在上面编写代码。

    然而,对数据也有要求 security . 也就是说,最终用户可以看到哪些信息。

    这实际上意味着降低数据库中行(甚至列)的可见性。

    我们正在使用Hibernate进行持久化。但是,我们正在使用自己的注释,以便不向业务领域专家公开我们的持久性选择。

    对于基于行的安全性,这意味着我们可以添加注释,例如 @Secured 在实体级别,这将导致在基础表中添加一个额外的列来约束我们的选择?

    对于基于列的安全性,我们也许可以 @安全的 要帮助生成查询,或者使用方面来过滤返回的信息?

    我很想知道这会如何影响hibernate的缓存机制?

    我相信很多其他人也会有同样的问题,我想知道你是如何处理这个问题的?

    2 回复  |  直到 10 年前
        1
  •  6
  •   JMM    16 年前

    Hibernate有一个 filter mechanism

    您的数据库也可能支持此功能。例如,Oracle拥有 Virtual Private Database (VPD)将在数据库级别重写查询。此解决方案还有一个额外的好处,即任何违反db的外部程序(如报告工具)都将强制执行您的安全限制。VPD还支持使用空值屏蔽受限列。

    不幸的是,上述解决方案不足以支持我通常从事的项目类型的安全需求。在上述解决方案中,通常存在一些不容易表达的上下文。例如,用户可以查看他们创建的、标记为公共的或属于他们管理的项目的数据。

    我们通常创建query/finder/DAO对象,在其中传入强制执行安全性所需的值,然后相应地创建查询。

    我希望这有帮助

        2
  •  1
  •   Brian Matthews    16 年前

    在使用Hibernate筛选器时,您需要知道附加的限制不会应用于 load() get()