过程和用户定义函数权限

为了能够运行过程或用户定义函数,用户需要具有相应的执行权限。过程和用户定义函数根据与常规 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 时,他们将看到匹配节点上存在的所有属性,即使他们没有读取权限。