存储过程和自定义函数权限企业版
要运行存储过程或用户自定义函数,用户需要具备相应的执行权限。存储过程和用户自定义函数的执行遵循与常规 Cypher 语句相同的安全规则,例如:如果用户仅拥有“读取”(read)权限,则该用户执行涉及写入操作的存储过程将会失败。
存储过程和用户自定义函数也可以使用超出用户自身权限的特权来运行。这被称为“执行提升”(execution boosting)。提升后的权限仅适用于存储过程或用户自定义函数内部;在函数外部执行的任何操作仍将使用用户原本的权限。
|
以下步骤假设存储过程或用户自定义函数已经完成开发并安装完毕。 有关创建和使用用户自定义存储过程及函数的说明,请参考 Java 参考手册 → 扩展 Neo4j。 |
管理存储过程权限
存储过程权限可以使用原生执行权限进行管理。这些权限控制用户是否被允许执行某个存储过程,以及在执行过程中应用哪一组权限。
存储过程可以使用 EXECUTE PROCEDURE 权限来运行。
这允许用户执行匹配 通配符(globbed)存储过程的程序。
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 存储过程时,用户将只能看到 A 和 B 节点以及 R1 关系,即使图中可能存在其他节点和关系。
存储过程也可以使用 EXECUTE BOOSTED PROCEDURE 权限以提升的权限执行。
|
|
这允许用户成功执行那些在原分配角色下会因权限不足而失败的存储过程。在存储过程执行期间,用户将被授予该过程的完全权限。
GRANT EXECUTE BOOSTED PROCEDURE db.schema.visualization ON DBMS TO visualizer
这将允许任何拥有 visualizer 角色的用户以提升的权限执行 db.schema.visualization。调用 db.schema.visualization 存储过程时,用户将看到图中存在的所有节点和关系,即使他们本身没有遍历这些数据的权限。
管理用户自定义函数权限
用户自定义函数权限可以使用原生执行权限进行管理。这些权限控制用户是否被允许执行某个用户自定义函数,以及在执行过程中应用哪一组权限。
用户自定义函数可以使用 EXECUTE USER DEFINED FUNCTION 权限来执行。
这允许用户执行匹配 通配符(globbed)用户自定义函数的函数。
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 权限以提升的权限执行。
|
|
这允许用户成功执行那些在原分配角色下会因权限不足而失败的用户自定义函数。在函数执行期间,用户将被授予该函数的完全权限。
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 时,他们将能看到匹配节点上存在的所有属性,即使他们本身没有读取权限。