Java 限制基于用户所属组的hibernate查询数据

Java 限制基于用户所属组的hibernate查询数据,java,hibernate,jboss,multi-tenant,Java,Hibernate,Jboss,Multi Tenant,标准示例可能是,您在同一托管实例上向多个公司提供服务,并希望员工只能看到来自同一公司其他员工的数据,而不能看到潜在竞争公司的数据 我将JBossAS7与Hibernate4.x一起使用 我可以从UI层向下推送公司信息,并在其上设置(无状态)持久性层过滤器,但这对我来说似乎是个坏主意,我宁愿在靠近数据库的地方完成 我猜一定有一个标准的、安全的解决方案,可能是围绕安全域或hibernate会话?思想?提前感谢。您似乎正在构建一个“多租户应用程序”。Hibernate对多租户的支持目前相当有限,其功能

标准示例可能是,您在同一托管实例上向多个公司提供服务,并希望员工只能看到来自同一公司其他员工的数据,而不能看到潜在竞争公司的数据

我将JBossAS7与Hibernate4.x一起使用

我可以从UI层向下推送公司信息,并在其上设置(无状态)持久性层过滤器,但这对我来说似乎是个坏主意,我宁愿在靠近数据库的地方完成

我猜一定有一个标准的、安全的解决方案,可能是围绕安全域或hibernate会话?思想?提前感谢。

您似乎正在构建一个“多租户应用程序”。Hibernate对多租户的支持目前相当有限,其功能最近已经在4.0.0.2中完成。请注意,此功能请求并未解决实体中添加租户鉴别器列的问题,根据JIRA中的讨论,这些列将在4.0.0.Alpha3或(根据JIRA)中到达。目前,您可以将与不同租户相关的数据存储在不同的数据库或模式中

您还可以阅读关于在Hibernate中实现多租户的各种选项;与HHH-5697中所做的工作相比,这是非常古老的,并且没有讨论如何在实体模型中创建具有租户鉴别器列的多租户应用程序。

您似乎正在构建一个“多租户应用程序”。Hibernate对多租户的支持目前相当有限,其功能最近已经在4.0.0.2中完成。请注意,此功能请求并未解决实体中添加租户鉴别器列的问题,根据JIRA中的讨论,这些列将在4.0.0.Alpha3或(根据JIRA)中到达。目前,您可以将与不同租户相关的数据存储在不同的数据库或模式中


您还可以阅读关于在Hibernate中实现多租户的各种选项;与HHH-5697中所做的工作相比,这是非常古老的,并且没有讨论如何在实体模型中创建具有租户鉴别器列的多租户应用程序。

我不确定是否有任何标准,但在两个系统上都使用过它。这些过时的工具,如Hibernate和我们对J2EE的使用

在我工作过的所有系统中,我们都必须自己编写代码——使用公司作为请求密钥的一部分

一种可能是对每个客户使用完全不同的“无论您的数据库如何调用其分区”。(如果您在Oracle中,则为模式)。听起来更复杂,但它确实保证了公司之间的隔离,也允许对扩展或新建/删除公司进行一些管理。我记得,在我以前的工作岗位上,如果有人提到将多家公司的数据保存在同一张表格中,法律界人士会感到紧张,因此他们会感到高兴

您可以让您的应用程序服务器作为可访问所有数据库的受信任用户连接到数据库,或者确保在连接时向下传递最终用户的凭据。我听说过这个。从安全角度来看,这听起来不错,这意味着在像Oracle这样的数据库中,正确的事情将会发生。我还没见过这样做,我想知道连接池会有多好的效果


编辑:上面Vinet的回答似乎很好地涵盖了这一点。这是一个我必须进一步研究的领域。我们可能有太多的遗留代码需要更改

我不确定是否有任何标准,但我曾在两个重要的系统上工作过。这些过时的工具,如Hibernate和我们对J2EE的使用

在我工作过的所有系统中,我们都必须自己编写代码——使用公司作为请求密钥的一部分

一种可能是对每个客户使用完全不同的“无论您的数据库如何调用其分区”。(如果您在Oracle中,则为模式)。听起来更复杂,但它确实保证了公司之间的隔离,也允许对扩展或新建/删除公司进行一些管理。我记得,在我以前的工作岗位上,如果有人提到将多家公司的数据保存在同一张表格中,法律界人士会感到紧张,因此他们会感到高兴

您可以让您的应用程序服务器作为可访问所有数据库的受信任用户连接到数据库,或者确保在连接时向下传递最终用户的凭据。我听说过这个。从安全角度来看,这听起来不错,这意味着在像Oracle这样的数据库中,正确的事情将会发生。我还没见过这样做,我想知道连接池会有多好的效果


编辑:上面Vinet的回答似乎很好地涵盖了这一点。这是一个我必须进一步研究的领域。我们可能有太多的遗留代码需要更改

那看起来和我想要的一模一样。我会关注最新的4.x版本。谢谢,不客气。顺便说一句,如果您使用的是JPA,请注意EclipseLink已经支持了。这看起来和我想要的完全一样。我会关注最新的4.x版本。谢谢,不客气。顺便说一句,如果您正在使用JPA,请注意EclipseLink已经支持。