2011-08-26 27 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的答案似乎覆蓋了它。這是一個我不得不多看的地方。我們在這裏可能有太多遺留代碼需要更改。