读取权限AuraDB Business CriticalAuraDB Virtual Dedicated Cloud企业版
存在三种独立的读取权限
有关如何阅读管理命令语法的更多详细信息,请参阅 阅读管理命令语法 和 图权限命令的组成部分。
TRAVERSE 权限
用户可以使用 GRANT TRAVERSE 权限获得查找节点和关系的权利。
GRANT [IMMUTABLE] TRAVERSE
ON { HOME GRAPH | GRAPH[S] { * | name[, ...] } }
[
ELEMENT[S] { * | label-or-rel-type[, ...] }
| NODE[S] { * | label[, ...] }
| RELATIONSHIP[S] { * | rel-type[, ...] }
| FOR pattern
]
TO role[, ...]
|
有关用于表示基于属性的访问控制规则的 |
例如,您可以允许拥有 regularUsers 角色的用户在 neo4j 数据库中查找所有带有 Post 标签的节点
GRANT TRAVERSE ON GRAPH neo4j NODES Post TO regularUsers
TRAVERSE 权限也可以被拒绝(DENY)。
DENY [IMMUTABLE] TRAVERSE
ON { HOME GRAPH | GRAPH[S] { * | name[, ...] } }
[
ELEMENT[S] { * | label-or-rel-type[, ...] }
| NODE[S] { * | label[, ...] }
| RELATIONSHIP[S] { * | rel-type[, ...] }
| FOR pattern
]
TO role[, ...]
例如,您可以禁止拥有 regularUsers 角色的用户查找所有带有 Payments 标签的节点
DENY TRAVERSE ON HOME GRAPH NODES Payments TO regularUsers
尽管您刚刚授予了 regularUsers 角色读取 Post 标签节点上所有属性的权利,但您可能希望使用 基于属性的访问控制 来实现更细粒度的控制,以隐藏 secret 属性设置为 true 的帖子。例如
DENY TRAVERSE ON HOME GRAPH FOR (:Post {secret: true}) TO regularUsers
|
如果数据库中不存在某个标签或关系类型,则用户在创建该标签或类型之前无法使用相应的权限。有关更多信息,请参阅 不存在的标签、关系类型和属性名称的权限。 |
READ 权限
用户可以使用 GRANT READ 权限获得读取节点和关系属性的权利。请务必注意,用户只能读取他们有权查找的实体上的属性。
GRANT [IMMUTABLE] READ "{" { * | property[, ...] } "}"
ON { HOME GRAPH | GRAPH[S] { * | name[, ...] } }
[
ELEMENT[S] { * | label-or-rel-type[, ...] }
| NODE[S] { * | label[, ...] }
| RELATIONSHIP[S] { * | rel-type[, ...] }
| FOR pattern
]
TO role[, ...]
|
有关用于表示基于属性的访问控制规则的 |
例如,您可以允许拥有 regularUsers 角色的用户读取 neo4j 数据库中 Post 标签节点上的所有属性。* 意味着读取所有属性的能力也扩展到将来可能添加的属性。
GRANT READ { * } ON GRAPH neo4j NODES Post TO regularUsers
为了进一步细化读取访问权限,您可以允许拥有 regularUsers 角色的用户读取 neo4j 数据库中 Post 标签节点上 secret 属性未设置为 true 的所有属性。例如
GRANT READ { * } ON GRAPH neo4j FOR (n:Post) WHERE n.secret <> true TO regularUsers
|
授予 |
READ 权限也可以被拒绝。
DENY [IMMUTABLE] READ "{" { * | property[, ...] } "}"
ON { HOME GRAPH | GRAPH[S] { * | name[, ...] } }
[
ELEMENT[S] { * | label-or-rel-type[, ...] }
| NODE[S] { * | label[, ...] }
| RELATIONSHIP[S] { * | rel-type[, ...] }
| FOR pattern
]
TO role[, ...]
尽管您刚刚授予了 regularUsers 角色读取所有属性的权利,但您可能希望隐藏 secret 属性。以下示例展示了如何实现这一点
DENY READ { secret } ON GRAPH neo4j NODES Post TO regularUsers
|
如果数据库中不存在标签、关系类型或属性名称,则用户在创建该内容之前无法使用相应的权限。有关更多信息,请参阅 不存在的标签、关系类型和属性名称的权限。 |
MATCH 权限
用户可以使用 GRANT MATCH 权限获得查找节点和关系并读取其属性的权利。在语义上,这等同于同时拥有 TRAVERSE 和 READ 权限。
GRANT [IMMUTABLE] MATCH "{" { * | property[, ...] } "}"
ON { HOME GRAPH | GRAPH[S] { * | name[, ...] } }
[
ELEMENT[S] { * | label-or-rel-type[, ...] }
| NODE[S] { * | label[, ...] }
| RELATIONSHIP[S] { * | rel-type[, ...] }
| FOR pattern
]
TO role[, ...]
|
有关用于表示基于属性的访问控制规则的 |
例如,如果您想授予 regularUsers 角色读取标签为 Message 的节点的 language 和 length 属性的能力,以及查找这些节点的能力,可以使用以下 GRANT MATCH 查询
GRANT MATCH { language, length } ON GRAPH neo4j NODES Message TO regularUsers
以下查询授予了 regularUsers 角色查找 secret 属性设置为 false 的 Post 和 Likes 节点,并读取其所有属性的能力。
GRANT MATCH { * } ON GRAPH neo4j FOR (n:Post|Likes) WHERE n.secret = false TO regularUsers
像所有其他权限一样,MATCH 权限也可以被拒绝。
DENY [IMMUTABLE] MATCH "{" { * | property[, ...] } "}"
ON { HOME GRAPH | GRAPH[S] { * | name[, ...] } }
[
ELEMENT[S] { * | label-or-rel-type[, ...] }
| NODE[S] { * | label[, ...] }
| RELATIONSHIP[S] { * | rel-type[, ...] }
| FOR pattern
]
TO role[, ...]
请注意,拒绝 MATCH 权限的效果取决于指定的是具体属性键还是 *。如果您指定了具体的属性键,则 DENY MATCH 将仅拒绝读取这些属性。查找元素进行遍历的功能仍然启用。如果您改为指定 *,则元素的遍历和所有属性读取都将被禁用。以下查询将展示相关示例。
拒绝 regularUsers 角色读取标签为 Message 的节点的 content 属性的查询如下所示。虽然无法读取此特定属性,但带有该标签的节点仍然可以被遍历(并且根据其他授权,其上的其他属性仍然可以被读取)。
DENY MATCH { content } ON GRAPH neo4j NODES Message TO regularUsers
以下查询举例说明了如果您想在 neo4j 数据库中同时拒绝读取所有属性和遍历带有 Account 标签的节点,应该如何操作
DENY MATCH { * } ON GRAPH neo4j NODES Account TO regularUsers
|
如果数据库中不存在标签、关系类型或属性名称,则用户在创建该内容之前无法使用相应的权限。有关更多信息,请参阅 不存在的标签、关系类型和属性名称的权限。 |