读取权限

有三种独立的读取权限

  • TRAVERSE - 允许找到指定的实体。

  • READ - 允许读取找到实体的指定属性。

  • MATCH - 结合了 TRAVERSEREAD,允许找到实体并读取其属性。

有关如何读取管理命令语法的更多详细信息,请参阅读取管理命令语法图权限命令的组成部分

TRAVERSE 权限

可以使用 GRANT TRAVERSE 权限授予用户查找节点和关系的权利。

GRANT [IMMUTABLE] TRAVERSE
  ON { HOME GRAPH | GRAPH[S] { * | name[, ...] } }
    [
      ELEMENT[S] { * | label-or-rel-type[, ...] }
      | NODE[S] { * | label[, ...] }
      | RELATIONSHIP[S] { * | rel-type[, ...] }
      | FOR pattern
    ]
  TO role[, ...]

有关用于表达基于属性的访问控制规则的 pattern 语法的更多详细信息,请参阅基于属性的访问控制

例如,您可以允许具有 regularUsers 角色的用户在 neo4j 数据库中找到所有带有 Post 标签的节点。

GRANT TRAVERSE ON GRAPH neo4j NODES Post TO regularUsers

TRAVERSE 权限也可以被拒绝。

DENY [IMMUTABLE] TRAVERSE
  ON { HOME GRAPH | GRAPH[S] { * | name[, ...] } }
    [
      ELEMENT[S] { * | label-or-rel-type[, ...] }
      | NODE[S] { * | label[, ...] }
      | RELATIONSHIP[S] { * | rel-type[, ...] }
      | FOR pattern
    ]
  TO role[, ...]

例如,我们可以禁止具有 regularUsers 角色的用户查找所有带有 Payments 标签的节点。

DENY TRAVERSE ON HOME GRAPH NODES Payments TO regularUsers

尽管您刚刚授予了 regularUsers 角色读取所有带有 Post 标签的节点属性的权利,但您可能希望使用基于属性的访问控制使其更细粒度,以隐藏 secret 属性设置为 true 的帖子。例如:

DENY TRAVERSE ON HOME GRAPH FOR (:Post {secret: true}) TO regularUsers

如果数据库中不存在标签或关系类型,则用户在创建之前无法使用相应的权限。有关更多信息,请参阅非现有标签、关系类型和属性名称的权限

READ 权限

可以使用 GRANT READ 权限授予用户对节点和关系执行属性读取的权利。非常重要的一点是,用户只能读取他们首先被允许找到的实体的属性。

GRANT [IMMUTABLE] READ "{" { * | property[, ...] } "}"
  ON { HOME GRAPH | GRAPH[S] { * | name[, ...] } }
    [
      ELEMENT[S] { * | label-or-rel-type[, ...] }
      | NODE[S] { * | label[, ...] }
      | RELATIONSHIP[S] { * | rel-type[, ...] }
      | FOR pattern
    ]
  TO role[, ...]

有关用于表达基于属性的访问控制规则的 pattern 语法的更多详细信息,请参阅基于属性的访问控制

例如,您可以允许具有 regularUsers 角色的用户在 neo4j 数据库中读取所有带有 Post 标签的节点的属性。* 表示读取所有属性的能力也延伸到未来可能添加的属性。

GRANT READ { * } ON GRAPH neo4j NODES Post TO regularUsers

为了进一步细化读取访问权限,您可以允许具有 regularUsers 角色的用户在 neo4j 数据库中读取 secret 属性未设置为 true 的带有 Post 标签的节点的所有属性。例如:

GRANT READ { * } ON GRAPH neo4j FOR (n:Post) WHERE n.secret <> true TO regularUsers

授予属性 READ 访问权限并不意味着可以找到具有该属性的实体。例如,如果同一实体上存在 DENY TRAVERSEGRANT READ,则 Cypher MATCH 语句将找不到该实体。

READ 权限也可以被拒绝。

DENY [IMMUTABLE] READ "{" { * | property[, ...] } "}"
  ON { HOME GRAPH | GRAPH[S] { * | name[, ...] } }
    [
      ELEMENT[S] { * | label-or-rel-type[, ...] }
      | NODE[S] { * | label[, ...] }
      | RELATIONSHIP[S] { * | rel-type[, ...] }
      | FOR pattern
    ]
  TO role[, ...]

虽然我们刚刚授予了 regularUsers 角色读取所有属性的权利,但我们可能希望隐藏 secret 属性。以下示例展示了如何实现:

DENY READ { secret } ON GRAPH neo4j NODES Post TO regularUsers

如果数据库中不存在标签、关系类型或属性名称,则用户在创建之前无法使用相应的权限。有关更多信息,请参阅非现有标签、关系类型和属性名称的权限

MATCH 权限

可以使用 GRANT MATCH 权限授予用户查找节点和关系以及对其执行属性读取的权利。这在语义上与同时拥有 TRAVERSEREAD 权限相同。

GRANT [IMMUTABLE] MATCH "{" { * | property[, ...] } "}"
  ON { HOME GRAPH | GRAPH[S] { * | name[, ...] } }
    [
      ELEMENT[S] { * | label-or-rel-type[, ...] }
      | NODE[S] { * | label[, ...] }
      | RELATIONSHIP[S] { * | rel-type[, ...] }
      | FOR pattern
    ]
  TO role[, ...]

有关用于表达基于属性的访问控制规则的 pattern 语法的更多详细信息,请参阅基于属性的访问控制

例如,如果您想授予 regularUsers 角色读取带有 Message 标签的节点的 languagelength 属性的能力,以及查找这些节点的能力,您可以使用以下 GRANT MATCH 查询:

GRANT MATCH { language, length } ON GRAPH neo4j NODES Message TO regularUsers

以下查询授予 regularUsers 角色查找 secret 属性设置为 falsePostLikes 节点,并读取其所有属性的能力。

GRANT MATCH { * } ON GRAPH neo4j FOR (n:Post|Likes) WHERE n.secret = false TO regularUsers

与所有其他权限一样,MATCH 权限也可以被拒绝。

DENY [IMMUTABLE] MATCH "{" { * | property[, ...] } "}"
  ON { HOME GRAPH | GRAPH[S] { * | name[, ...] } }
    [
      ELEMENT[S] { * | label-or-rel-type[, ...] }
      | NODE[S] { * | label[, ...] }
      | RELATIONSHIP[S] { * | rel-type[, ...] }
      | FOR pattern
    ]
  TO role[, ...]

请注意,拒绝 MATCH 权限的效果取决于是否指定了具体的属性键或是否为 *。如果您指定了具体的属性键,则 DENY MATCH 将仅拒绝读取这些属性。遍历元素的查找仍然会被启用。如果您指定 *,则元素的遍历和所有属性读取都将被禁用。以下查询将显示示例。

拒绝 regularUsers 角色读取带有 Message 标签的节点的 content 属性将如下所示。尽管无法读取此特定属性,但带有该标签的节点仍然可以被遍历(并且,根据其他授权,其上的其他属性仍然可以被读取)。

DENY MATCH { content } ON GRAPH neo4j NODES Message TO regularUsers

以下查询示例说明了如果您想在 neo4j 数据库中同时拒绝读取所有属性和遍历带有 Account 标签的节点时该如何操作。

DENY MATCH { * } ON GRAPH neo4j NODES Account TO regularUsers

如果数据库中不存在标签、关系类型或属性名称,则用户在创建之前无法使用相应的权限。有关更多信息,请参阅非现有标签、关系类型和属性名称的权限

© . All rights reserved.