行级安全性

问题描述 投票:0回答:1

我正在一家公司工作并开发一个应用程序,其中用户拥有各种类型数据的 CRUD。众所周知,数据可能是敏感的,具体取决于类型。

首先,在我的公司,我们有不同类型的“角色”。不同的角色可以看到不同的数据,取决于角色的类型。听起来有点奇怪的是,我们必须手动过滤数据,我们在系统上进行的每个查询都有带有规则的 where 子句,这对我们来说看起来不正确。我们正在使用 hibernate 来执行我们的 DAO。

其次,在我的应用程序上,它有点不同,但目标相同。用户插入数据,他们只能看到自己的数据。当他们愿意时,就会在每个查询中进行过滤。我正在使用 mongodb 和吗啡,我必须按“用户”进行过滤,但是,取决于我正在寻找的文档,用户处于不同的级别。

示例:

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

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

[
  {
    "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());

我做了一些研究,发现了一些我不太清楚的结果:

  • 行级安全;
  • @休眠中的过滤器

行级安全性,最好由数据库来实现。因此,每次进行查询时,数据库都会查看规则并过滤数据。毕竟看起来很棒,但是,我如何告诉数据库哪个用户呢?我系统的每个用户都必须在数据库中获得授权?必须是数据库中的用户吗?

hibernate中的

@Filter,与i相同,但至少它在类中。在每个查询中我都必须说出必须过滤的内容。是我最后的选择。

我的目标是了解现在它是如何运作的? trello 如何知道哪些卡片来自用户? Facebook 如何知道哪个帖子是您的?他们如何过滤数据集?每个查询都进行过滤正常吗?他们是在数据库中还是在应用程序中执行此操作?

java mongodb hibernate jpa morphia
1个回答
1
投票

我认为这个 Stackoverflow 问题提出了太多问题。但让我们尝试回答其中的大部分问题:

行级安全性 我认为您不想在数据库上使用行级安全性。仅当您为数据用户提供对数据库的直接访问权限时才需要这样做。如果您仅通过 API 授予访问权限,则可以让 API 处理所有过滤(并限制他们查询的方式!)。因为通常您希望保持数据库授予相当静态,而不是让 DBA 每次都更改权限(除非您只有几个大数据库用户,否则不会经常更改,这将是一个选项)。

休眠状态下的过滤器 我对此感到困惑。您提到了 SQL/Hibernate 和 Mongodb/Morphia。用于两种不同数据库类型的两个不同对象映射器。另外,我不会将此选项称为“按 Hibernate 过滤”。让我们将其命名为“通过 API 过滤”并使用外观设计模式。外观类将位于 Morphia 和 Hibernate API 的前面,API 用户只能通过此 API 访问数据库。

© www.soinside.com 2019 - 2024. All rights reserved.