数据库权限
管理员可以使用以下 Cypher 命令来管理 Neo4j 数据库管理权限。
数据库权限命令的组成部分是
-
命令:
-
`GRANT` - 将权限授予角色。
-
`DENY` - 拒绝角色的权限。
-
`REVOKE` - 从角色中删除已授予或拒绝的权限。
-
-
可变性:
-
IMMUTABLE- 当与GRANT或DENY结合使用时,指定权限不能被随后移除,除非身份验证被禁用。相反,当IMMUTABLE与REVOKE命令结合使用时,它将充当过滤器,只移除匹配的*不可变*权限。另请参见 不可变权限。
-
-
数据库权限
-
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 语法。 |
命令 |
|
语法 |
|
描述 |
将权限授予一个或多个角色。 |
命令 |
|
语法 |
|
描述 |
拒绝一个或多个角色的权限。 |
命令 |
|
语法 |
|
描述 |
撤销一个或多个角色的已授予权限。 |
命令 |
|
语法 |
|
描述 |
撤销一个或多个角色的已拒绝权限。 |
命令 |
|
语法 |
|
描述 |
撤销一个或多个角色的已授予或已拒绝权限。 |
|
|
常见的错误,例如拼写错误或尝试撤销未授予或未拒绝的权限,会导致通知。在 Neo4j 的未来主要版本中,其中一些通知可能会被错误替换。有关通知的详细信息,请参见 状态代码 → 通知代码。
下图显示了不同数据库权限之间的层次结构。
命令 |
|
语法 |
|
描述 |
授予指定角色访问权限
|
命令 |
|
语法 |
|
描述 |
授予指定角色启动或停止家庭数据库、特定数据库或所有数据库的权限。 |
命令 |
|
语法 |
|
描述 |
授予指定角色在家庭数据库、特定数据库或所有数据库上创建、删除或显示索引的权限。 |
命令 |
|
语法 |
|
描述 |
授予指定角色管理家庭数据库、特定数据库或所有数据库上的索引的权限。 |
命令 |
|
语法 |
|
描述 |
授予指定角色在家庭数据库、特定数据库或所有数据库上创建、删除或显示约束的权限。 |
命令 |
|
语法 |
|
描述 |
授予指定角色管理家庭数据库、特定数据库或所有数据库上的约束的权限。 |
命令 |
|
语法 |
|
描述 |
授予指定角色在家庭数据库、特定数据库或所有数据库中创建新的节点标签的权限。 |
命令 |
|
语法 |
|
描述 |
授予指定角色在家庭数据库、特定数据库或所有数据库中创建新的关系类型的权限。 |
命令 |
|
语法 |
|
描述 |
授予指定角色在家庭数据库、特定数据库或所有数据库中创建新的属性名称的权限。 |
命令 |
|
语法 |
|
描述 |
授予指定角色管理家庭数据库、特定数据库或所有数据库中新的标签、关系类型和属性名称的权限。 |
命令 |
|
语法 |
|
描述 |
授予指定角色家庭数据库、特定数据库或所有数据库和远程数据库别名的所有权限。 |
命令 |
|
语法 |
|
描述 |
授予指定角色列出和结束家庭数据库、特定数据库或所有数据库中所有用户或特定用户的交易和查询的权限。 |
命令 |
|
语法 |
|
描述 |
授予指定角色管理家庭数据库、特定数据库或所有数据库中所有用户或特定用户的交易和查询的权限。 |
数据库 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
| 命令 |
|---|
|
|
行数: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
| 命令 |
|---|
|
|
|
|
|
|
行数:6 |
|
请注意, |
INDEX MANAGEMENT 权限
可以使用 CREATE INDEX、DROP INDEX 和 SHOW INDEXES 命令创建、删除或列出索引。可以使用 GRANT CREATE INDEX、GRANT DROP INDEX 和 GRANT SHOW INDEX 命令授予执行此操作的权限。可以使用 GRANT INDEX MANAGEMENT 命令授予执行所有这三个操作的权限。
命令 |
|
语法 |
|
描述 |
使指定角色能够在家庭数据库、特定数据库或所有数据库中创建、删除或显示索引。 |
命令 |
|
语法 |
|
描述 |
允许指定的角色在主数据库、特定数据库或所有数据库中管理索引。 |
例如,要授予角色regularUsers在数据库neo4j上创建索引的权限,请使用
GRANT CREATE INDEX ON DATABASE neo4j TO regularUsers
CONSTRAINT MANAGEMENT 权限
可以使用CREATE CONSTRAINT、DROP CONSTRAINT和SHOW CONSTRAINTS命令创建、删除或列出约束。可以通过GRANT CREATE CONSTRAINT、GRANT DROP CONSTRAINT、GRANT SHOW CONSTRAINT命令授予执行此操作的权限。可以通过GRANT CONSTRAINT MANAGEMENT命令授予执行所有这三种操作的权限。
命令 |
|
语法 |
|
描述 |
允许指定的角色在主数据库、特定数据库或所有数据库中创建、删除或显示约束。 |
命令 |
|
语法 |
|
描述 |
允许指定的角色在主数据库、特定数据库或所有数据库中管理约束。 |
例如,要授予角色regularUsers在数据库neo4j上创建约束的权限,请使用
GRANT CREATE CONSTRAINT ON DATABASE neo4j TO regularUsers
NAME MANAGEMENT 权限
创建新的标签、关系类型和属性名的权利与创建节点、关系和属性的权利不同。后者通过数据库WRITE权限进行管理,而前者通过针对每种类型进行的特定GRANT/DENY CREATE NEW ...命令进行管理。
命令 |
|
语法 |
|
描述 |
允许指定的角色在主数据库、特定数据库或所有数据库中创建新的节点标签。 |
命令 |
|
语法 |
|
描述 |
允许指定的角色在主数据库、特定数据库或所有数据库中创建新的关系类型。 |
命令 |
|
语法 |
|
描述 |
允许指定的角色在主数据库、特定数据库或所有数据库中创建新的属性名。 |
命令 |
|
语法 |
|
描述 |
允许指定的角色在主数据库、特定数据库或所有数据库中创建新的标签、关系类型和属性名。 |
|
当不使用 |
例如,要授予角色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[, ...]
|
请注意, |
例如,要将上述能力授予数据库neo4j上的角色databaseAdminUsers,请使用以下查询。
GRANT ALL DATABASE PRIVILEGES ON DATABASE neo4j TO databaseAdminUsers
可以使用 SHOW PRIVILEGES 命令查看授予的权限
SHOW ROLE databaseAdminUsers PRIVILEGES AS COMMANDS
| 命令 |
|---|
|
行数:1 |
授予TRANSACTION MANAGEMENT权限
运行命令SHOW TRANSACTIONS、TERMINATE TRANSACTIONS以及弃用的过程dbms.listTransactions、dbms.listQueries、dbms.killQuery、dbms.killQueries、dbms.killTransaction和dbms.killTransactions的权利现在通过SHOW TRANSACTION和TERMINATE TRANSACTION权限进行管理。
命令 |
|
语法 |
|
描述 |
允许指定的角色列出主数据库、特定数据库或所有数据库中用户或所有用户的交易和查询。 |
命令 |
|
语法 |
|
描述 |
允许指定的角色结束主数据库、特定数据库或所有数据库中用户或所有用户的正在运行的交易和查询。 |
命令 |
|
语法 |
|
描述 |
允许指定的角色管理主数据库、特定数据库或所有数据库中用户或所有用户的交易和查询。 |
|
请注意, |
例如,要授予角色regularUsers在数据库neo4j上列出用户jake的交易的权限,请使用
GRANT SHOW TRANSACTION (jake) ON DATABASE neo4j TO regularUsers