数据库权限

管理员可以使用以下 Cypher 命令来管理 Neo4j 数据库管理权限。

数据库权限命令的组成部分是

  • 命令:

    • `GRANT` - 将权限授予角色。

    • `DENY` - 拒绝角色的权限。

    • `REVOKE` - 从角色中删除已授予或拒绝的权限。

  • 可变性:

    • IMMUTABLE - 当与 GRANTDENY 结合使用时,指定权限不能被随后移除,除非身份验证被禁用。相反,当 IMMUTABLEREVOKE 命令结合使用时,它将充当过滤器,只移除匹配的*不可变*权限。另请参见 不可变权限

  • 数据库权限

    • ACCESS - 允许访问特定数据库或远程数据库别名。

    • START - 允许启动指定数据库。

    • STOP - 允许停止指定数据库。

    • CREATE INDEX - 允许在指定数据库上创建索引。

    • DROP INDEX - 允许在指定数据库上删除索引。

    • SHOW INDEX - 允许在指定数据库上列出索引。

    • INDEX [MANAGEMENT] - 允许在指定数据库上创建、删除和列出索引。

    • CREATE CONSTRAINT - 允许在指定数据库上创建约束。

    • DROP CONSTRAINT - 允许在指定数据库上删除约束。

    • SHOW CONSTRAINT - 允许在指定数据库上列出约束。

    • CONSTRAINT [MANAGEMENT] - 允许在指定数据库上创建、删除和列出约束。

    • CREATE NEW [NODE] LABEL - 允许创建新的节点标签。

    • CREATE NEW [RELATIONSHIP] TYPE - 允许创建新的关系类型。

    • CREATE NEW [PROPERTY] NAME - 允许创建属性名称,以便节点和关系可以分配具有这些名称的属性。

    • NAME [MANAGEMENT] - 允许所有名称管理功能:节点标签、关系类型和属性名称。

    • ALL [[DATABASE] PRIVILEGES] - 允许对指定数据库或远程数据库别名访问、索引、约束和名称管理。

    • SHOW TRANSACTION - 允许列出指定数据库上指定用户的交易和查询。

    • TERMINATE TRANSACTION - 允许结束指定数据库上指定用户的交易和查询。

    • TRANSACTION [MANAGEMENT] - 允许列出和结束指定数据库上指定用户的交易和查询。

  • 名称

    • 要与权限关联的数据库。

      如果删除数据库并使用相同名称创建新数据库,新数据库将**不会**具有之前分配给已删除数据库的相同权限。

    • 名称组件可以是*,这意味着所有数据库。在此命令执行后创建的数据库也将与这些权限相关联。

    • 命令的DATABASE[S] name部分可以替换为HOME DATABASE。这指的是为用户配置的家庭数据库,或者如果该用户没有配置家庭数据库,则指的是默认数据库。如果用户在该命令执行后由于任何原因更改了家庭数据库,新数据库将与这些权限相关联。这可能非常强大,因为它允许通过简单地更改用户的家庭数据库将权限从一个数据库切换到另一个数据库。

  • 角色[, …​]

    • 要与权限关联的角色,以逗号分隔。

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

表 1. 通用 ON DATABASE 权限语法

命令

GRANT ... ON ... TO ...

语法

GRANT [IMMUTABLE] database-privilege ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } } TO role[, ...]

描述

将权限授予一个或多个角色。

表 2. 通用 deny ON DATABASE 权限语法

命令

DENY ... ON ... TO ...

语法

DENY [IMMUTABLE] database-privilege ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } } TO role[, ...]

描述

拒绝一个或多个角色的权限。

表 3. 通用 revoke ON DATABASE 权限语法

命令

REVOKE GRANT ... ON ... FROM ...

语法

REVOKE [IMMUTABLE] GRANT database-privilege ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } } FROM role[, ...]

描述

撤销一个或多个角色的已授予权限。

表 4. 通用 revoke ON DATABASE 权限语法

命令

REVOKE DENY ... ON ... FROM ...

语法

REVOKE [IMMUTABLE] DENY database-privilege ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } } FROM role[, ...]

描述

撤销一个或多个角色的已拒绝权限。

表 5. 通用 revoke ON DATABASE 权限语法

命令

REVOKE ... ON ... FROM ...

语法

REVOKE [IMMUTABLE] database-privilege ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } } FROM role[, ...]

描述

撤销一个或多个角色的已授予或已拒绝权限。

DENY **不会**删除已授予的权限。如果要删除权限,请使用REVOKE

常见的错误,例如拼写错误或尝试撤销未授予或未拒绝的权限,会导致通知。在 Neo4j 的未来主要版本中,其中一些通知可能会被错误替换。有关通知的详细信息,请参见 状态代码 → 通知代码

下图显示了不同数据库权限之间的层次结构。

privileges hierarchy database
图 1. 数据库权限层次结构
表 6. 数据库权限语法

命令

GRANT ACCESS

语法

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

描述

授予指定角色访问权限

  • 家庭数据库。

  • 特定数据库或远程数据库别名。

  • 所有数据库和远程数据库别名。

表 7. 数据库权限语法

命令

GRANT { START | STOP }

语法

GRANT [IMMUTABLE] { START | STOP }
  ON { HOME DATABASE | DATABASE[S] {* | name[, ...] } }
  TO role[, ...]

描述

授予指定角色启动或停止家庭数据库、特定数据库或所有数据库的权限。

表 8. 数据库权限语法

命令

GRANT { CREATE | DROP | SHOW } INDEX

语法

GRANT [IMMUTABLE] { CREATE | DROP | SHOW } INDEX[ES]
  ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } }
  TO role[, ...]

描述

授予指定角色在家庭数据库、特定数据库或所有数据库上创建、删除或显示索引的权限。

表 9. 数据库权限语法

命令

GRANT INDEX

语法

GRANT [IMMUTABLE] INDEX[ES] [MANAGEMENT]
  ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } }
  TO role[, ...]

描述

授予指定角色管理家庭数据库、特定数据库或所有数据库上的索引的权限。

表 10. 数据库权限语法

命令

GRANT { CREATE | DROP | SHOW } CONSTRAINT

语法

GRANT [IMMUTABLE] { CREATE | DROP | SHOW } CONSTRAINT[S]
  ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } }
  TO role[, ...]

描述

授予指定角色在家庭数据库、特定数据库或所有数据库上创建、删除或显示约束的权限。

表 11. 数据库权限语法

命令

GRANT CONSTRAINT

语法

GRANT [IMMUTABLE] CONSTRAINT[S] [MANAGEMENT]
  ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } }
  TO role[, ...]

描述

授予指定角色管理家庭数据库、特定数据库或所有数据库上的约束的权限。

表 12. 数据库权限语法

命令

GRANT CREATE NEW LABEL

语法

GRANT [IMMUTABLE] CREATE NEW [NODE] LABEL[S]
  ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } }
  TO role[, ...]

描述

授予指定角色在家庭数据库、特定数据库或所有数据库中创建新的节点标签的权限。

表 13. 数据库权限语法

命令

GRANT CREATE NEW TYPE

语法

GRANT [IMMUTABLE] CREATE NEW [RELATIONSHIP] TYPE[S]
  ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } }
  TO role[, ...]

描述

授予指定角色在家庭数据库、特定数据库或所有数据库中创建新的关系类型的权限。

表 14. 数据库权限语法

命令

GRANT CREATE NEW NAME

语法

GRANT [IMMUTABLE] CREATE NEW [PROPERTY] NAME[S]
  ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } }
  TO role[, ...]

描述

授予指定角色在家庭数据库、特定数据库或所有数据库中创建新的属性名称的权限。

表 15. 数据库权限语法

命令

GRANT NAME

语法

GRANT [IMMUTABLE] NAME [MANAGEMENT]
  ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } }
  TO role[, ...]

描述

授予指定角色管理家庭数据库、特定数据库或所有数据库中新的标签、关系类型和属性名称的权限。

表 16. 数据库权限语法

命令

GRANT ALL

语法

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

描述

授予指定角色家庭数据库、特定数据库或所有数据库和远程数据库别名的所有权限。

表 17. 数据库权限语法

命令

GRANT { SHOW | TERMINATE } TRANSACTION

语法

GRANT [IMMUTABLE] { SHOW | TERMINATE } TRANSACTION[S] [( { * | user[, ...] } )]
  ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } }
  TO role[, ...]

描述

授予指定角色列出和结束家庭数据库、特定数据库或所有数据库中所有用户或特定用户的交易和查询的权限。

表 18. 数据库权限语法

命令

GRANT TRANSACTION

语法

GRANT [IMMUTABLE] TRANSACTION [MANAGEMENT] [( { * | user[, ...] } )]
  ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } }
  TO role[, ...]

描述

授予指定角色管理家庭数据库、特定数据库或所有数据库中所有用户或特定用户的交易和查询的权限。

privileges grant and deny syntax database privileges
图 2. GRANT 和 DENY 数据库权限的语法

数据库 ACCESS 权限

ACCESS 权限允许用户连接到数据库或远程数据库别名。使用 ACCESS,您可以运行计算,例如 RETURN 2 * 5 AS answer 或调用函数 RETURN timestamp() AS time

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

例如,要授予角色 regularUsers 访问数据库 neo4j 的权限,请使用

GRANT ACCESS ON DATABASE neo4j TO regularUsers

ACCESS 权限也可以被拒绝

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

例如,要拒绝角色 regularUsers 访问远程数据库别名 remote-db 的权限,请使用

DENY ACCESS ON DATABASE `remote-db` TO regularUsers

可以使用 SHOW PRIVILEGES 命令查看授予的权限

SHOW ROLE regularUsers PRIVILEGES AS COMMANDS
表 19. 结果
命令

"DENY ACCESS ON DATABASE remote-db TO `regularUsers`"

"GRANT ACCESS ON DATABASE neo4j TO `regularUsers`"

行数:2

数据库 START/STOP 权限

START 权限可用于启用启动数据库的功能

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

例如,要授予角色 regularUsers 启动数据库 neo4j 的权限,请使用

GRANT START ON DATABASE neo4j TO regularUsers

START 权限也可以被拒绝

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

例如,要拒绝角色 regularUsers 启动数据库 neo4j 的权限,请使用

DENY START ON DATABASE system TO regularUsers

STOP 权限可用于启用停止数据库的功能

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

例如,要授予角色 regularUsers 停止数据库 neo4j 的权限,请使用

GRANT STOP ON DATABASE neo4j TO regularUsers

STOP 权限也可以被拒绝

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

例如,要拒绝角色 regularUsers 停止数据库 neo4j 的权限,请使用

DENY STOP ON DATABASE system TO regularUsers

可以使用 SHOW PRIVILEGES 命令查看授予的权限

SHOW ROLE regularUsers PRIVILEGES AS COMMANDS
表 20. 结果
命令

"DENY ACCESS ON DATABASE remote-db TO `regularUsers`"

"DENY START ON DATABASE system TO `regularUsers`"

"DENY STOP ON DATABASE system TO `regularUsers`"

"GRANT ACCESS ON DATABASE neo4j TO `regularUsers`"

"GRANT START ON DATABASE neo4j TO `regularUsers`"

"GRANT STOP ON DATABASE neo4j TO `regularUsers`"

行数:6

请注意,STARTSTOP 权限不包含在 ALL DATABASE PRIVILEGES 中。

INDEX MANAGEMENT 权限

可以使用 CREATE INDEXDROP INDEXSHOW INDEXES 命令创建、删除或列出索引。可以使用 GRANT CREATE INDEXGRANT DROP INDEXGRANT SHOW INDEX 命令授予执行此操作的权限。可以使用 GRANT INDEX MANAGEMENT 命令授予执行所有这三个操作的权限。

表 21. 索引管理权限语法

命令

GRANT { CREATE | DROP | SHOW } INDEX

语法

GRANT [IMMUTABLE] { CREATE | DROP | SHOW } INDEX[ES]
  ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } }
  TO role[, ...]

描述

使指定角色能够在家庭数据库、特定数据库或所有数据库中创建、删除或显示索引。

表 22. 索引管理权限语法

命令

GRANT INDEX

语法

GRANT [IMMUTABLE] INDEX[ES] [MANAGEMENT]
  ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } }
  TO role[, ...]

描述

允许指定的角色在主数据库、特定数据库或所有数据库中管理索引。

例如,要授予角色regularUsers在数据库neo4j上创建索引的权限,请使用

GRANT CREATE INDEX ON DATABASE neo4j TO regularUsers

CONSTRAINT MANAGEMENT 权限

可以使用CREATE CONSTRAINTDROP CONSTRAINTSHOW CONSTRAINTS命令创建、删除或列出约束。可以通过GRANT CREATE CONSTRAINTGRANT DROP CONSTRAINTGRANT SHOW CONSTRAINT命令授予执行此操作的权限。可以通过GRANT CONSTRAINT MANAGEMENT命令授予执行所有这三种操作的权限。

表 23. 约束管理权限语法

命令

GRANT { CREATE | DROP | SHOW } CONSTRAINT

语法

GRANT [IMMUTABLE] { CREATE | DROP | SHOW } CONSTRAINT[S]
  ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } }
  TO role[, ...]

描述

允许指定的角色在主数据库、特定数据库或所有数据库中创建、删除或显示约束。

表 24. 约束管理权限语法

命令

GRANT CONSTRAINT

语法

GRANT [IMMUTABLE] CONSTRAINT[S] [MANAGEMENT]
  ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } }
  TO role[, ...]

描述

允许指定的角色在主数据库、特定数据库或所有数据库中管理约束。

例如,要授予角色regularUsers在数据库neo4j上创建约束的权限,请使用

GRANT CREATE CONSTRAINT ON DATABASE neo4j TO regularUsers

NAME MANAGEMENT 权限

创建新的标签、关系类型和属性名的权利与创建节点、关系和属性的权利不同。后者通过数据库WRITE权限进行管理,而前者通过针对每种类型进行的特定GRANT/DENY CREATE NEW ...命令进行管理。

表 25. 节点标签管理权限语法

命令

GRANT CREATE NEW LABEL

语法

GRANT [IMMUTABLE] CREATE NEW [NODE] LABEL[S]
  ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } }
  TO role[, ...]

描述

允许指定的角色在主数据库、特定数据库或所有数据库中创建新的节点标签。

表 26. 关系类型管理权限语法

命令

GRANT CREATE NEW TYPE

语法

GRANT [IMMUTABLE] CREATE NEW [RELATIONSHIP] TYPE[S]
  ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } }
  TO role[, ...]

描述

允许指定的角色在主数据库、特定数据库或所有数据库中创建新的关系类型。

表 27. 属性名管理权限语法

命令

GRANT CREATE NEW NAME

语法

GRANT [IMMUTABLE] CREATE NEW [PROPERTY] NAME[S]
  ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } }
  TO role[, ...]

描述

允许指定的角色在主数据库、特定数据库或所有数据库中创建新的属性名。

表 28. 节点标签、关系类型和属性名权限管理语法

命令

GRANT NAME

语法

GRANT [IMMUTABLE] NAME [MANAGEMENT]
  ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } }
  TO role[, ...]

描述

允许指定的角色在主数据库、特定数据库或所有数据库中创建新的标签、关系类型和属性名。

当不使用AS COMMANDS时,SHOW PRIVILEGES命令会将NAME MANAGEMENT权限作为操作token返回。

例如,要授予角色regularUsers在数据库neo4j上创建节点或关系上的新属性的权限,请使用

GRANT CREATE NEW PROPERTY NAME ON DATABASE neo4j TO regularUsers

授予ALL DATABASE PRIVILEGES

可以通过单个命令获得访问数据库、创建和删除索引和约束以及创建新的标签、关系类型或属性名的权利

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

请注意,ALL DATABASE PRIVILEGES授予不包括启动和停止所有数据库以及事务管理的权限。这些权限与管理员相关联,而其他数据库权限对域和应用程序开发人员有用。

例如,要将上述能力授予数据库neo4j上的角色databaseAdminUsers,请使用以下查询。

GRANT ALL DATABASE PRIVILEGES ON DATABASE neo4j TO databaseAdminUsers

可以使用 SHOW PRIVILEGES 命令查看授予的权限

SHOW ROLE databaseAdminUsers PRIVILEGES AS COMMANDS
表 29. 结果
命令

"GRANT ALL DATABASE PRIVILEGES ON DATABASE neo4j TO `databaseAdminUsers`"

行数:1

授予TRANSACTION MANAGEMENT权限

运行命令SHOW TRANSACTIONSTERMINATE TRANSACTIONS以及弃用的过程dbms.listTransactionsdbms.listQueriesdbms.killQuerydbms.killQueriesdbms.killTransactiondbms.killTransactions的权利现在通过SHOW TRANSACTIONTERMINATE TRANSACTION权限进行管理。

表 30. 数据库权限语法

命令

GRANT SHOW TRANSACTION

语法

GRANT [IMMUTABLE] SHOW TRANSACTION[S] [( { * | user[, ...] } )]
  ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } }
  TO role[, ...]

描述

允许指定的角色列出主数据库、特定数据库或所有数据库中用户或所有用户的交易和查询。

表 31. 数据库权限语法

命令

GRANT TERMINATE TRANSACTION

语法

GRANT [IMMUTABLE] TERMINATE TRANSACTION[S] [( { * | user[, ...] } )]
  ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } }
  TO role[, ...]

描述

允许指定的角色结束主数据库、特定数据库或所有数据库中用户或所有用户的正在运行的交易和查询。

表 32. 数据库权限语法

命令

GRANT TRANSACTION

语法

GRANT [IMMUTABLE] TRANSACTION [MANAGEMENT] [( { * | user[, ...] } )]
  ON { HOME DATABASE | DATABASE[S] { * | name[, ...] } }
  TO role[, ...]

描述

允许指定的角色管理主数据库、特定数据库或所有数据库中用户或所有用户的交易和查询。

请注意,TRANSACTION MANAGEMENT权限不包含在ALL DATABASE PRIVILEGES中。

例如,要授予角色regularUsers在数据库neo4j上列出用户jake的交易的权限,请使用

GRANT SHOW TRANSACTION (jake) ON DATABASE neo4j TO regularUsers