读取权限
有三种独立的读取权限
有关如何读取管理命令语法的更多详细信息,请参阅读取管理命令语法和图权限命令的组成部分。
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 [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
数据库中读取 secret
属性未设置为 true
的带有 Post
标签的节点的所有属性。例如:
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
如果数据库中不存在标签、关系类型或属性名称,则用户在创建之前无法使用相应的权限。有关更多信息,请参阅非现有标签、关系类型和属性名称的权限。 |