2011-08-26 72 views
1

标准示例可能是您在同一个托管实例中向多个公司提供服务的位置,并希望员工只能看到来自同一公司的其他员工的数据,而不是潜在的竞争性公司。根据用户所属组限制休眠查询数据

我在使用JBossAS7和Hibernate 4.x.

可能将公司信息从UI层推下来,并具有(无状态)持久层过滤器,但对我来说这似乎是一个坏主意,我宁愿让它在一个地方完成到数据库。

我猜测必须有一个标准的,安全的解决方案,可能围绕安全域或休眠会话?思考?提前致谢。

回答

1

您似乎在构建“多租户应用程序”。 Hibernate对多租户的支持目前相当受限,最近完成的功能request 5697在4.0.0.Alpha2中。请注意,此功能请求并未解决实体中租户鉴别器列的添加问题,JIRA中讨论的这些列将抵达4.0.0.Alpha3或4.1.0(由JIRA执行)。目前,您可以将与各种租户相关的数据存储在不同的数据库或模式中。

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

+0

这看起来完全像我以后。我会密切关注最新的4.x版本。谢谢。 – rich

+0

不客气。顺便说一句,如果您使用的是JPA,请注意EclipseLink已经支持[multitenancy](http://wiki.eclipse.org/EclipseLink/Examples/JPA/Multitenant)。 –

0

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

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

一种可能性是每个客户的完全不同的“无论您的数据库调用其分区”。 (如果您在Oracle中,则使用Schema)。听起来比较复杂,但它确实保证了公司之间的隔离,它也允许对扩展或新/删除公司进行一些管理。在我以前的工作中,我记得如果有人提到将多个公司的数据保存在同一个表中,法律类型会感到紧张 - 这样可以让他们高兴。

您可以让应用程序服务器以可以访问所有内容的可信用户身份连接到数据库,或者确保在连接时传递最终用户的凭据。我听说过这个。从安全角度来看,这听起来不错,而像Oracle这样的数据库意味着正确的事情就会发生。我还没有看到它完成,并想知道如果连接池可以工作的话。

编辑:上面的Vineet的答案似乎覆盖了它。这是一个我不得不多看的地方。我们在这里可能有太多遗留代码需要更改。