2008-08-29 13 views
6

私が現在取り組んでいるシステムでは、ロールベースのセキュリティが必要です。これはJava EEスタックに適しています。システムは、ビジネスドメインの専門家がそのコードを上に書くためのフレームワークになることを目指しています。データ 'security' with java and hibernate

ただし、データsecurityの要件もあります。すなわち、どの情報がエンドユーザに見えるか。

これは、データベース内の行(および場合によっては列)の可視性を効果的に減らすことを意味します。

私たちは永続性のためにHibernateを使用しています。しかし、私たちは、永続性の選択肢をビジネス分野の専門家に公開しないように、独自の注釈を使用しています。

これは、エンティティレベルで@Securedのような注釈を追加することができます。これにより、基になるテーブルに余分な列が追加され、選択項目が制約されますか?

カラムベースのセキュリティでは、クエリ生成に役立つか、返された情報をフィルタ処理するためにおそらく@Securedを使用できますか?

これは、これがどのようにしてhibernateのキャッシュメカニズムにも影響を与えるかどうか知りたいのですが?

他の多くの人が同じ問題を抱えていると確信しています。私はあなたがこれにどのようにアプローチしたのか疑問に思っていましたか?感謝

...

答えて

6

Hibernateはあなたのために働くかもしれfilter mechanismています。フィルターは、hibernateが生成する照会を書き換えて、戻される行を制限する追加の節を組み込みます。私は列を隠す/隠すために休止状態で何も認識していません。

データベースでこの機能がサポートされている場合もあります。たとえば、OracleにはVirtual Private Database(VPD)があり、データベースレベルでクエリを書き換えます。このソリューションには、DBに対抗する外部プログラム(レポートツールなど)にセキュリティ制限が適用されるという利点があります。 VPDは、NULLで制限された列をマスクする機能もサポートしています。

残念ながら、上記の解決策は、私が通常作業しているタイプのプロジェクトのセキュリティ要件をサポートするのに十分ではありませんでした。通常、上記の解決策では簡単に表現できないようなコンテキストがあります。たとえば、ユーザーは作成したデータ、公開されたデータ、管理しているプロジェクトに属しているデータを表示できます。

通常、セキュリティを強化するために必要な値を渡すクエリ/ファインダ/ DAOオブジェクトを作成し、それに応じてクエリを作成します。

私はあなたは追加の制限がload()またはget()方法によりgenerted SQLステートメントに適用されないことに注意する必要がありHibernateフィルタを使用する場合、これは

1

に役立ちます願っています。