过程和用户定义函数权限

要运行过程或用户定义函数,用户需要拥有相应的执行权限。过程和用户定义函数根据与常规 Cypher 语句相同的安全规则执行,例如,如果只具有读取权限的用户调用执行写入操作的过程,则该过程将失败。

过程和用户定义函数也可以在超出用户自身权限的情况下运行。这称为执行提升。提升的权限仅在过程或用户定义函数内部生效;在外部执行的任何操作仍将使用用户的原始权限。

以下步骤假定过程或用户定义函数已开发并安装。

有关创建和使用用户定义过程和函数的说明,请参阅Java 参考 → 扩展 Neo4j

管理过程权限

过程权限可以使用本机执行权限进行管理。这些权限控制用户是否被允许执行过程,以及执行过程中应用哪些权限集。

过程可以使用EXECUTE PROCEDURE 权限运行。

这允许用户执行与通配符过程匹配的过程。

示例 1. 授予执行过程的权限
GRANT EXECUTE PROCEDURE db.schema.visualization ON DBMS TO visualizer

这将允许任何具有 visualizer 角色的用户执行 db.schema.visualization。例如,一个还拥有以下权限的用户:

GRANT TRAVERSE ON GRAPH * NODES A, B TO role
GRANT TRAVERSE ON GRAPH * RELATIONSHIP R1 TO role

当调用 db.schema.visualization 过程时,即使可能存在其他节点和关系,用户也只能看到 AB 节点以及 R1 关系。

过程也可以使用EXECUTE BOOSTED PROCEDURE 权限以提升的权限执行。

EXECUTE BOOSTED PROCEDURE 权限仅控制执行期间使用的权限,而不控制执行本身。用户需要同时拥有 EXECUTE PROCEDUREEXECUTE BOOSTED PROCEDURE 才能以提升的权限执行过程。

这允许用户成功执行那些否则会因其分配的角色而在执行期间失败的过程。用户在过程执行期间仅被赋予该过程的完全权限。

示例 2. 授予在过程执行期间使用提升权限的权限
GRANT EXECUTE BOOSTED PROCEDURE db.schema.visualization ON DBMS TO visualizer

这将允许任何具有 visualizer 角色的用户以提升的权限执行 db.schema.visualization。当调用 db.schema.visualization 过程时,即使他们没有遍历权限,用户也将看到图中存在的所有节点和关系。

管理用户定义函数权限

用户定义函数权限可以使用本机执行权限进行管理。这些权限控制用户是否被允许执行用户定义函数,以及执行过程中应用哪些权限集。

用户定义函数可以使用EXECUTE USER DEFINED FUNCTION 权限执行。

这允许用户执行与通配符用户定义函数匹配的用户定义函数。

示例 3. 授予执行用户定义函数的权限
GRANT EXECUTE USER DEFINED FUNCTION apoc.any.properties ON DBMS TO custom

这将允许任何具有 custom 角色的用户执行 apoc.any.properties。例如,一个还拥有以下权限的用户:

GRANT MATCH {visibleProp} ON GRAPH * NODES A TO role

当调用用户定义函数 MATCH (a:A) RETURN apoc.any.properties(a) AS properties 时,即使可能存在其他属性,他们也只能看到 visibleProp

用户定义函数也可以使用EXECUTE BOOSTED USER DEFINED FUNCTION 权限以提升的权限执行。

EXECUTE BOOSTED USER DEFINED FUNCTION 权限仅控制执行期间使用的权限,而不控制执行本身。用户需要同时拥有 EXECUTE USER DEFINED FUNCTIONEXECUTE BOOSTED USER DEFINED FUNCTION 才能以提升的权限执行用户定义函数。

这允许用户成功执行那些否则会因其分配的角色而在执行期间失败的用户定义函数。用户在函数执行期间仅被赋予该用户定义函数的完全权限。

示例 4. 授予在用户定义函数执行期间使用提升权限的权限
GRANT EXECUTE BOOSTED USER DEFINED FUNCTION apoc.any.properties ON DBMS TO custom

这将允许任何具有 custom 角色的用户以提升的权限执行 apoc.any.properties。例如,一个还拥有以下权限的用户:

GRANT TRAVERSE ON GRAPH * NODES A TO role

当调用用户定义函数 MATCH (a:A) RETURN apoc.any.properties(a) AS properties 时,即使他们没有读取权限,他们也将看到匹配节点上存在的所有属性。

© . All rights reserved.