保护扩展程序
Neo4j 可以通过编写自定义代码来进行扩展,这些代码可以直接从 Cypher 中调用,详见 Java 参考 → 用户自定义过程 和 Java 参考 → 用户自定义函数。本页介绍了如何确保这些附加组件的安全性。
允许列表(Allow listing)
允许列表可用于仅加载大型库中的少数扩展。建议根据最小权限原则加载扩展。该原则要求仅加载执行查询所必需的过程和函数。
配置设置 dbms.security.procedures.allowlist 用于指定库中应当可用的特定过程和函数。它定义了一个以逗号分隔的待加载过程和函数列表。该列表既可以包含完全限定的过程名称,也可以包含带有通配符 * 的部分名称。
在此示例中,您需要允许使用 apoc.load.json 方法以及 apoc.coll 下的所有方法。您不希望 apoc 库中除满足这些条件以外的任何其他扩展可用。
# Example allow listing
dbms.security.procedures.allowlist=apoc.coll.*,apoc.load.json
关于 dbms.security.procedures.allowlist,有几点需要注意:
-
如果使用此设置,则除了所列出的扩展外,不会加载其他任何扩展。特别地,如果将其设置为空字符串,则不会加载任何扩展。
|
解除限制(Unrestricting)
出于安全原因,默认情况下会禁用使用内部 API 的过程和函数。在这种情况下,同样建议使用最小权限原则,仅解除那些您确定要使用的过程和函数的限制。
可以通过配置设置 dbms.security.procedures.unrestricted 来解除过程和函数的限制。它定义了一个以逗号分隔的待解除限制的过程和函数列表。该列表既可以包含完全限定的过程和函数名称,也可以包含带有通配符 (*) 表达式的部分名称。
在此示例中,您需要解除对过程 apoc.cypher.runFirstColumn 和 apoc.cypher.doIt 的使用限制。
# Example unrestricting
dbms.security.procedures.unrestricted=apoc.cypher.runFirstColumn,apoc.cypher.doIt