数据库权限
管理员可以使用以下 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
。这指的是为用户配置的主数据库,或者如果该用户没有配置主数据库,则指的是默认数据库。如果用户的主数据库在此命令执行后因任何原因发生更改,则新的主数据库将与这些权限关联。这非常强大,因为它允许通过简单地更改用户的主数据库来将权限从一个数据库切换到另一个数据库。
-
-
角色[, …]
-
要与权限关联的一个或多个角色,以逗号分隔。
-
有关语法描述的更多详细信息,请参阅 数据库管理命令语法。 |
命令 |
|
语法 |
|
描述 |
授予一个或多个角色权限。 |
命令 |
|
语法 |
|
描述 |
拒绝一个或多个角色权限。 |
命令 |
|
语法 |
|
描述 |
从一个或多个角色中撤销已授予的权限。 |
命令 |
|
语法 |
|
描述 |
从一个或多个角色中撤销被拒绝的权限。 |
命令 |
|
语法 |
|
描述 |
从一个或多个角色中撤销已授予或拒绝的权限。 |
|
常见的错误,例如拼写错误或尝试撤销尚未授予或拒绝的权限,将导致通知。其中一些通知可能会在 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