数据库权限

管理员可以使用以下 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。这指的是为用户配置的主数据库,或者如果该用户没有配置主数据库,则指的是默认数据库。如果用户的主数据库在此命令执行后因任何原因发生更改,则新的主数据库将与这些权限关联。这非常强大,因为它允许通过简单地更改用户的主数据库来将权限从一个数据库切换到另一个数据库。

  • 角色[, …​]

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

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

表 1. GRANT 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
© . All rights reserved.