jpa 行级安全

cyvaqqii  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(92)

我在一家公司工作,开发一个应用程序,用户有各种类型的数据的CRUD。众所周知,数据可能是敏感的,取决于类型。
首先,在我的公司里,我们有不同类型的“角色”。不同的角色可以看到不同的数据,这取决于角色的类型。听起来有点奇怪的是,我们必须手动过滤数据,我们在系统上的每个查询,都有带规则的where子句,我们看起来不对。我们使用Hibernate来执行我们的DAO。
第二,在我的应用程序上,它有点不同,但有相同的目标。用户插入数据,他们只能看到自己的数据。当他们想要的时候,每个人都有一个过滤器。我使用mongodb与morphine,我必须通过“用户”过滤,但取决于我正在寻找的文档,用户是在不同的级别。
范例:

  • 每个基金都有一个用户;
  • 每笔交易都有资金;

如果我列出的资金的用户我有以下文件:

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

如果我列出了用户的交易,我有以下文档:

[
  {
    "value": 1234.23,
    "date": "2017-01-01",
    "fund": {
      "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如何知道哪个帖子是你的?他们如何过滤数据集?在每个查询中进行过滤是正常的吗?他们是在数据库中还是在应用程序中执行这些操作?

vsnjm48y

vsnjm48y1#

  • 我认为在这个单一的Stackoverflow问题中问了太多的问题。让我们来回答其中的大部分问题:*
    行级安全性我认为您不希望在数据库上使用行级安全性。只有在给予数据用户直接访问数据库的权限时才需要这样做。如果您给予仅由API访问的权限,则可以让API处理所有过滤(并限制它们查询过滤的方式!因为通常你想保持你的数据库赠款相当静态,而不是让DBA每次都改变权限(除非你只有几个大的数据库用户,这不会经常改变,这将是一个选项)。
    在休眠中过滤我对这个感到困惑。You mention SQL/Hibernate en Mongodb/Mortgage.两种不同的对象Map器,用于两种不同的数据库类型。我也不会把这个选项叫做“Filter by Hibernate”。让我们将其命名为 “filter by API” 并使用facade design pattern。facade类将位于Morphine和Hibernate API的前面,并且API用户只能通过此API访问数据库。

相关问题