写入权限

写入权限是为图的不同部分定义的

  • CREATE - 允许创建节点和关系。

  • DELETE - 允许删除节点和关系。

  • SET LABEL - 允许使用 SET 子句设置指定的节点标签。

  • REMOVE LABEL - 允许使用 REMOVE 子句删除指定的节点标签。

  • SET PROPERTY - 允许在节点和关系上设置属性。

还有一些复合权限,它们组合了上述特定权限

  • MERGE - 允许 MATCHCREATESET PROPERTY 应用 MERGE 命令。

  • WRITE - 允许对整个图执行所有 WRITE 操作。

  • 所有图权限 - 允许对整个图执行所有 READWRITE 操作。

有关语法描述的更多详细信息,请参阅 管理命令的 Cypher 语法

CREATE 权限

CREATE 权限允许用户在图上创建新的节点和关系元素。有关更多详细信息,请参阅 Cypher 手册 → CREATE 子句。

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

例如,要授予 regularUsers 角色在 neo4j 图上 CREATE 元素的能力,请使用

GRANT CREATE ON GRAPH neo4j ELEMENTS * TO regularUsers

CREATE 权限也可以被拒绝

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

例如,要拒绝角色regularUsers在所有图上创建标签为foo的节点的权限,请使用

DENY CREATE ON GRAPH * NODES foo TO regularUsers

如果用户尝试创建数据库中尚不存在的标签的节点,则用户还必须拥有CREATE NEW LABEL权限。新的关系也适用相同规则:需要CREATE NEW RELATIONSHIP TYPE权限。

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

DELETE权限

DELETE权限允许用户删除图上的节点和关系元素。有关更多详细信息,请参阅Cypher 手册→DELETE子句。

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

例如,要授予角色regularUsers在图neo4jDELETE元素的权限,请使用

GRANT DELETE ON GRAPH neo4j ELEMENTS * TO regularUsers

DELETE权限也可以被拒绝

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

例如,要拒绝角色regularUsers在所有图上删除关系类型为bar的关系的权限,请使用

DENY DELETE ON GRAPH * RELATIONSHIPS bar TO regularUsers

拥有DELETE权限但TRAVERSE权限受限的用户,在某些情况下将无法执行DETACH DELETE。有关更多信息,请参阅href:tutorial/access-control.adoc#detach-delete-restricted-user[delete restricted user]。

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

SET LABEL权限

SET LABEL权限允许您使用Cypher SET子句在节点上设置标签。

GRANT [IMMUTABLE] SET LABEL { * | label[, ...] }
  ON { HOME GRAPH | GRAPH[S] { * | name[, ...] } }
  TO role[, ...]

例如,要授予角色regularUsers在图neo4j的节点上SET任何标签的权限,请使用

GRANT SET LABEL * ON GRAPH neo4j TO regularUsers

与许多其他READWRITE权限不同,无法将SET LABEL权限限制为特定的元素、节点或关系。

SET LABEL权限也可以被拒绝

DENY [IMMUTABLE] SET LABEL { * | label[, ...] }
  ON { HOME GRAPH | GRAPH[S] { * | name[, ...] } }
  TO role[, ...]

例如,要拒绝角色regularUsers在所有图的节点上SET标签foo的权限,请使用

DENY SET LABEL foo ON GRAPH * TO regularUsers

如果数据库中不存在此标签的任何实例,则还需要CREATE NEW LABEL权限。

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

REMOVE LABEL权限

REMOVE LABEL权限允许您使用Cypher REMOVE子句从节点中删除标签。

GRANT [IMMUTABLE] REMOVE LABEL { * | label[, ...] }
  ON { HOME GRAPH | GRAPH[S] { * | name[, ...] } }
  TO role[, ...]

例如,要授予角色regularUsers在图neo4j的节点上REMOVE任何标签的权限,请使用

GRANT REMOVE LABEL * ON GRAPH neo4j TO regularUsers

与许多其他READWRITE权限不同,无法将REMOVE LABEL权限限制为特定的元素、节点或关系。

REMOVE LABEL权限也可以被拒绝

DENY [IMMUTABLE] REMOVE LABEL { * | label[, ...] }
  ON { HOME GRAPH | GRAPH[S] { * | name[, ...] } }
  TO role[, ...]

例如,拒绝角色regularUsers在所有图的节点上删除标签foo的权限,请使用

DENY REMOVE LABEL foo ON GRAPH * TO regularUsers

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

SET PROPERTY权限

SET PROPERTY权限允许用户使用Cypher SET子句在图的节点或关系元素上设置属性。

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

例如,要授予角色regularUsers在图neo4j的所有元素上SET任何属性的权限,请使用

GRANT SET PROPERTY {*} ON HOME GRAPH ELEMENTS * TO regularUsers

SET PROPERTY权限也可以被拒绝

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

例如,要拒绝角色regularUsers在所有图上设置标签为bar的节点的属性foo的权限,请使用

DENY SET PROPERTY { foo } ON GRAPH * NODES bar TO regularUsers

如果用户尝试设置数据库中尚不存在的属性名称的属性,则用户还必须拥有CREATE NEW PROPERTY NAME权限。

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

MERGE权限

MERGE权限是一个复合权限,它将TRAVERSEREAD(即MATCH)与CREATESET PROPERTY结合在一起。这旨在启用Cypher MERGE命令的使用,但也适用于需要这些权限的所有读写操作。

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

例如,要授予角色regularUsers在图neo4j的所有元素上MERGE的权限,请使用

GRANT MERGE {*} ON GRAPH neo4j ELEMENTS * TO regularUsers

无法拒绝MERGE权限。如果您希望阻止用户创建元素和设置属性:请使用DENY CREATEDENY SET PROPERTY

如果用户尝试创建数据库中尚不存在的标签的节点,则用户还必须拥有CREATE NEW LABEL权限。新的关系和属性也适用相同规则 - 需要CREATE NEW RELATIONSHIP TYPECREATE NEW PROPERTY NAME权限。

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

WRITE权限

WRITE权限允许用户在图上执行任何WRITE命令。

GRANT [IMMUTABLE] WRITE
  ON { HOME GRAPH | GRAPH[S] { * | name[, ...] } }
  TO role[, ...]

例如,要授予角色regularUsers在图neo4jWRITE的权限,请使用

GRANT WRITE ON GRAPH neo4j TO regularUsers

与更具体的WRITE命令不同,无法将WRITE权限限制为特定的元素、节点或关系。如果您希望阻止用户写入数据库对象的子集,则可以将GRANT WRITE与更具体的DENY命令结合使用以定位这些元素。

WRITE权限也可以被拒绝

DENY [IMMUTABLE] WRITE
  ON { HOME GRAPH | GRAPH[S] { * | name[, ...] } }
  TO role[, ...]

例如,要拒绝角色regularUsers在图neo4jWRITE的权限,请使用

DENY WRITE ON GRAPH neo4j TO regularUsers

拥有WRITE权限但TRAVERSE权限受限的用户,在某些情况下将无法执行DETACH DELETE。有关更多信息,请参阅delete restricted user

ALL GRAPH PRIVILEGES权限

ALL GRAPH PRIVILEGES权限允许用户在图上执行任何命令。

GRANT [IMMUTABLE] ALL [ [ GRAPH ] PRIVILEGES ]
  ON { HOME GRAPH | GRAPH[S] { * | name[, ...] } }
  TO role[, ...]

例如,要授予角色regularUsers在图neo4jALL GRAPH PRIVILEGES,请使用

GRANT ALL GRAPH PRIVILEGES ON GRAPH neo4j TO regularUsers

与更具体的READWRITE命令不同,无法将ALL GRAPH PRIVILEGES限制为特定的元素、节点或关系。如果您希望阻止用户读取或写入数据库对象的子集,则可以将GRANT ALL GRAPH PRIVILEGES与更具体的DENY命令结合使用以定位这些元素。

ALL GRAPH PRIVILEGES权限不允许创建新的标签、关系类型或属性名称。这些权限由NAME MANAGEMENT权限管理。

ALL GRAPH PRIVILEGES权限也可以被拒绝

DENY [IMMUTABLE] ALL [ [ GRAPH ] PRIVILEGES ]
  ON { HOME GRAPH | GRAPH[S] { * | name[, ...] } }
  TO role[, ...]

例如,要拒绝角色regularUsers在图neo4j上所有图权限,请使用

DENY ALL GRAPH PRIVILEGES ON GRAPH neo4j TO regularUsers