Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 行级安全性_Java_Mongodb_Hibernate_Jpa_Morphia - Fatal编程技术网

Java 行级安全性

Java 行级安全性,java,mongodb,hibernate,jpa,morphia,Java,Mongodb,Hibernate,Jpa,Morphia,我在一家公司工作,正在开发一个应用程序,用户可以从中获得各种类型的数据。我们都知道,数据可能是敏感的,这取决于类型 首先,在我的公司,我们有不同类型的“角色”。不同的角色可以查看不同的数据,具体取决于角色的类型。听起来有点奇怪的是,我们必须手动过滤数据,系统上的每个查询都有带有规则的where子句,我们认为它不正确。我们正在使用hibernate来执行DAO 第二,在我的应用程序上,它有点不同,但目标相同。用户插入数据,他只能看到自己的数据。当他想要时,每个查询中都会进行筛选。我将mongodb

我在一家公司工作,正在开发一个应用程序,用户可以从中获得各种类型的数据。我们都知道,数据可能是敏感的,这取决于类型

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

第二,在我的应用程序上,它有点不同,但目标相同。用户插入数据,他只能看到自己的数据。当他想要时,每个查询中都会进行筛选。我将mongodb与morphia一起使用,我必须按“用户”进行筛选,但是,根据我要查找的文档,用户处于不同的级别

例如:

  • 每个基金都有一个用户
  • 每笔交易都有一笔资金
如果我列出了用户的资金,我有以下文档:

[
  {
    "description": "xpto",
    "user": {
      "login": "Someone"
    }
  }
]
[
  {
    "value": 1234.23,
    "date": "2017-01-01",
    "fund": {
      "description": "xpto",
      "user": {
        "login": "Someone"
      }
    }
  }
]
如果我列出用户的交易,我有以下文档:

[
  {
    "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中的过滤器,与我相同,但至少它在类中。在每一个查询中,我都要说a需要过滤什么。这是我最后的选择

我的目标是了解它现在是如何工作的?trello如何从用户那里知道wich卡?Facebook怎么知道哪个帖子是你的?他们是如何过滤数据集的?在每个查询中进行筛选是否正常?他们是在数据库中还是在应用程序中这样做的?

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

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

在休眠状态下进行筛选 我被这个弄糊涂了。您提到了Mongodb/Morphia中的SQL/Hibernate。两种不同数据库类型的两种不同对象映射器。此外,我不会将此选项称为“Hibernate过滤”。让我们将其命名为“FilterbyAPI”,并使用。facade类将位于Morphia和Hibernate API的前面,API用户只能通过该API访问数据库