保护Neo4j查询访问的数据

时间:2014-03-26 05:20:17

标签: security neo4j authorization cypher

我希望将Neo4j数据库中包含的数据的安全性降低到单个节点和/或关系的级别。

大多数数据都可供所有用户使用,但有些数据会受到用户角色的限制。我可以为我希望限制的数据添加属性或标签。

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

如果我必须从外部做一些事情,那么我不仅必须过滤返回的结果,而且我还必须解析并限制或修改针对数据运行的所有查询以防止用户编写查询它对不允许查看的数据采取行动。

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

可以这样做吗?如果它已经不受支持,代码中是否有合适的位置可以添加这样的安全过滤器,还是需要更改代码呢?

谢谢,达蒙

1 个答案:

答案 0 :(得分:1)

正如克里斯所说,它在数据库级别上肯定不是微不足道的,但是如果您正在寻找应用程序级别的解决方案,那么您可以查看Structr,这是一个基于并紧密集成的框架与Neo4j。

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

REST API和UI等所有更高级别的访问级别仅查看用户上下文中可用的记录。

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