2017-06-06 5 views
0

私は会社で働いていて、ユーザーがさまざまな種類のデータのCRUDを持っているアプリを開発しています。私たちが知っているように、データは機密性を持つ可能性があります。タイプによって異なります。行レベルのセキュリティ

私の会社では、まず「ロール」の種類が異なります。異なるロールは異なるタイプのデータを見ることができ、ロールのタイプによって異なります。ちょっとうんざりするのは、手動でデータをフィルタリングする必要があるということです。システム上にあるすべてのクエリには、where節があり、ルールは正しく表示されません。私たちはDAOを実行するために休止状態を使用しています。

第2に、私のアプリでは、それは少し異なりますが、同じ目標を持っています。ユーザーはデータを挿入し、データを見ることしかできません。彼が望むときは、すべてのクエリでフィルタが作成されます。私はモッフィアとmongodbを使用しています、私は "ユーザー"によってフィルタリングする必要がありますが、私が探しているドキュメントに依存し、ユーザーは異なるレベルにあります。

例:

  • すべての基金のユーザーを持っています。
  • すべての取引にはファンドがあります。

私は、次のドキュメント持っているユーザーの資金上場していた場合:

[ 
    { 
    "value": 1234.23, 
    "date": "2017-01-01", 
    "fund": { 
     "description": "xpto", 
     "user": { 
     "login": "Someone" 
     } 
    } 
    } 
] 
:私は次のドキュメントを持っているユーザーのトランザクションをリストアップしていた場合

[ 
    { 
    "description": "xpto", 
    "user": { 
     "login": "Someone" 
    } 
    } 
] 

datastore.find(Fund.class).filter("user.login", getUser().getLogin()); 

だから、資金のクエリで私はこれを持っています取引において:

datastore.find(Transaction.class).filter("funds.user.login", getUser().getLogin()); 

私はいくつかの研究を行い、私にはそれほど明確ではないいくつかの結果を見つける:

  • 行レベルのセキュリティを、休止状態

行レベルのセキュリティ

  • @Filterは、より優れたデータベースによって行われます。したがって、作成されたすべてのクエリは、データベースがルールを調べてデータをフィルタリングします。結局のところ素晴らしいですが、データベースをどのようにユーザーに伝えるのですか?私のシステムのすべてのユーザーは、データベースに付与する必要がありますか?データベースのユーザーである必要がありますか?

    @Filter in hibernateは、iと同じになりますが、少なくともクラス内にあります。すべてのクエリで、フィルタリングする必要があると言わなければなりません。私の最後の選択です。

    私の目標は、現在どのように機能しているのか理解していますか? trelloはカードがユーザーからのものであることをどのように知っていますか?あなたの投稿があなたのものだとFacebookがどのように知っていますか?彼らはどのようにデータセットをフィルタリングしていますか?すべてのクエリでフィルタが正常に実行されますか?彼らはデータベースやアプリケーションでそれをしていますか?

  • 答えて

    0

    私はあまりにも多くの質問がこの単一のStackoverflowの質問で尋ねられると思います。しかし、のは、それらのほとんどにお答えしてみましょう:

    行レベルのセキュリティ 私は、データベースに行レベルのセキュリティを使用したいとは思いません。これは、データユーザーがデータベースに直接アクセスできるようにする場合にのみ必要です。 APIのみでアクセス権を与えた場合、APIにすべてのフィルタリングを処理させることができます(また、クエリの方法を制限することができます)。通常、データベース権限はかなり静的なままにしておき、毎回DBAに権限を変更させないようにしたいとします(DBユーザーを数人しか持たない場合は、これはオプションになります)。

    ハイバネーションでフィルタ これは混乱します。あなたはSQL/Hibernate en Mongodb/Morphiaについて言及しています。 2つの異なるデータベースタイプ用の2つの異なるオブジェクトマッパー。また、私はこのオプションを"フィルターによって休止状態"と呼んでいません。 「APIでフィルタする」とし、facade design patternを使用しましょう。 FacadeクラスはMorphia APIとHibernate APIの両方にあり、APIユーザーはこのAPIを介してのみデータベースにアクセスできます。

    関連する問題