2014-03-26 62 views
0

我希望对包含在Neo4j数据库中的数据实施安全性,使其达到单个节点和/或关系的级别。保护Neo4j查询访问的数据

大部分数据将会提供给所有用户,但有些数据将受到用户角色的限制。我可以为要限制的数据添加属性或标签。

我想允许用户针对数据运行自定义密码查询,但隐藏用户未被授权查看的任何数据。

如果我必须从外面做一些事情,那么我不仅必须过滤返回的结果,还必须解析并限制或修改针对数据运行的所有查询,以防止用户编写查询哪些数据作用于他们不被允许查看。

理想的解决方案是,如果存在低级挂钩,它允许在密码查询作用于这些记录之前拦截读取节点和关系。拦截器将执行安全检查,如果它们失败,那么它的行为就好像该节点或关系根本不存在。即相同的密码查询根据谁运行它会有不同的结果。这将适用于所有可能的查询,例如计数(n)不仅仅是那些返回节点/关系的。

可以这样做吗?如果它不被支持,那么在代码中是否有合适的位置可以添加这样的安全过滤器,还是需要进行很多代码更改?

谢谢,达蒙

+0

这肯定不是目前支持的Neo4j与Cypher支架,并且不太可能的东西可以添加平凡。您可能会实现自己的外观和查询API,而不是通过Cypher为用户提供直接访问。 –

回答

1

正如克里斯说,它肯定不是在数据库级别微不足道,但如果你正在寻找应用层面的解决方案,你可能有一个看Structr,在顶部的框架,与Neo4j紧密集成。

它提供了基于ACL,具有用户,组和不同访问级别的节点级安全性。 Structr中的安全性在尽可能最低的级别上实现,即f.e.如果查询用户具有适当的访问权限,我们只实例化对象。

所有较高的访问级别(如REST API和UI)都只能查看用户上下文中可用的记录。

[1] http://structr.orghttps://github.com/structr/structr

+0

谢谢阿克塞尔。我们一定会看看这个。它也可能解决我们在Neo4j中遇到的其他一些问题。 –