2017-06-06 49 views
0

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

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

其次,在我的应用程序中,它有点不同,但具有相同的目标。用户插入数据,他只能看到他的数据。当他想要的时候,每个查询都会有一个过滤器。我正在使用morpho的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()); 

我做了一些研究,并找到了一些效果都不太清楚,我:

  • 行级安全性;
  • @Filter休眠

行级安全,是更好地数据库进行。因此,每一个查询都会完成,数据库将查看规则并过滤数据。看起来不错,但是,我该如何告诉数据库哪个用户?我系统中的每个用户都必须在数据库中授予权限?必须是数据库中的用户?

@Filter in hibernate,与i相同,但至少它在课堂上。在每个查询中,我必须说明必须过滤的内容。是我选择的最后一个。

我的目标是明白现在它是如何工作的? trello如何知道用户的许可证? Facebook知道这个帖子是你的吗?他们如何过滤数据集?每个查询过滤器都正常吗?他们是否在数据库或应用程序中执行它?

回答

0

我想在这个单一的Stackoverflow问题中提出了太多的问题。但是,让我们尝试回答大部分:

行级安全 要在数据库上使用行级安全性,我不认为。这只有在您让数据用户直接访问数据库时才需要。如果您仅通过API授予访问权限,则可以让API处理所有过滤(并限制它们可以查询的方式!)。因为通常情况下,您希望让数据库授予相当静态,并且不要让DBA每次更改权限(除非您只有几个大型DB用户,而且这种情况不会经常发生变化,这是一个选项)。

过滤器进入休眠状态 我对此感到困惑。你提到SQL/Hibernate en Mongodb/Morphia。两种不同的数据库类型的两种不同的对象映射器。我也不会称这个选项为“按休眠过滤”。我们将其命名为“通过API过滤”并使用facade design pattern。 Facade类将在Morphia和Hibernate API之前,并且API用户只能通过此API访问数据库。