子图访问控制

时间:2017-01-16 10:02:02

标签: neo4j controls access subgraph

在官方文档中(3.1:http://neo4j.com/docs/operations-manual/current/security/authentication-authorization/subgraph-access-control/) 据说

"例如,可以允许用户读取但不写入标有Employee的节点以及类型REPORTS_TO"

的关系

但是没有它在这个页面和其他人写的如何做到这一点。 使用"调用dbms.procedures()"我们可以在企业版中看到更多功能,但没有关于定义这个子图控件的信息

我们考虑改变企业版,但是如果我们确定能够做到这一点。 任何人都可以解释我或给我相关文件的地址

由于

1 个答案:

答案 0 :(得分:3)

那里的文件很好。请注意第一句话:

  

通过使用用户定义的程序自定义角色,   管理员可以限制用户的访问权限和后续操作   图的指定部分。

对于没有写入权限的用户,这种方法似乎是适当的为他们创建角色,然后创建(或使用现有的)用户定义的过程来执行允许他们执行的操作。然后将过程的权限配置到适当的级别,并将过程的角色(通​​过修改dbms.security.procedures.roles)与先前创建的角色相关联。这允许您创建的过程由与其关联的角色执行。

例如,给定一个没有写入权限的HR用户,您可以创建一个过程来创建或删除:Employistrators节点之间的:REPORTS_TO关系。该过程需要设置为mode = WRITE,因为它需要写访问权限。这通常不能由此HR用户执行,因为他们没有写入权限。

但是,如果您创建了一个角色,请说' hr',并将该角色添加到此用户,并将该过程设置为dbms.security.procedures.roles中的hr角色可访问,然后是hr用户可以执行此过程,它将执行必要的写操作。

总之,Neo4j的子图访问控制不是在节点或标签本身上定义的,在Cypher中执行写语句时也不适用。此访问控制特定于用户定义的过程,并允许具有特定角色(该角色与这些过程相关联)的用户执行这些过程,即使他们通常由于其访问级别而无法执行这些过程。

编辑

最后一件可能对您有用的事情...... Neo4j有一种注册transaction event handlers的方法,可以对正在进行的事务执行检查和逻辑,并在不符合某些条件时拒绝。我假设您可以在这里获得用户的角色,并且可能会检查特定标签上的作者操作的事务。奇怪的是,在保护文档的子图部分时没有引用它。我自己没有尝试过这种方法(我以后会尝试自己的测试)所以我不确定它是否能满足您的需求,但值得一看。