保护扩展程序

Neo4j 可以通过编写自定义代码来进行扩展,这些代码可以直接从 Cypher 中调用,详见 Java 参考 → 用户自定义过程Java 参考 → 用户自定义函数。本页介绍了如何确保这些附加组件的安全性。

允许列表(Allow listing)

允许列表可用于仅加载大型库中的少数扩展。建议根据最小权限原则加载扩展。该原则要求仅加载执行查询所必需的过程和函数。

配置设置 dbms.security.procedures.allowlist 用于指定库中应当可用的特定过程和函数。它定义了一个以逗号分隔的待加载过程和函数列表。该列表既可以包含完全限定的过程名称,也可以包含带有通配符 * 的部分名称。

示例 1. 允许列表

在此示例中,您需要允许使用 apoc.load.json 方法以及 apoc.coll 下的所有方法。您不希望 apoc 库中除满足这些条件以外的任何其他扩展可用。

# Example allow listing
dbms.security.procedures.allowlist=apoc.coll.*,apoc.load.json

关于 dbms.security.procedures.allowlist,有几点需要注意:

  • 如果使用此设置,则除了所列出的扩展外,不会加载其他任何扩展。特别地,如果将其设置为空字符串,则不会加载任何扩展。

  • 该设置的默认值为 *。这意味着如果您没有明确为其指定值(或未赋值),则 plugins 目录下的所有库都将被加载。

解除限制(Unrestricting)

出于安全原因,默认情况下会禁用使用内部 API 的过程和函数。在这种情况下,同样建议使用最小权限原则,仅解除那些您确定要使用的过程和函数的限制。

可以通过配置设置 dbms.security.procedures.unrestricted 来解除过程和函数的限制。它定义了一个以逗号分隔的待解除限制的过程和函数列表。该列表既可以包含完全限定的过程和函数名称,也可以包含带有通配符 (*) 表达式的部分名称。

示例 2. 解除限制

在此示例中,您需要解除对过程 apoc.cypher.runFirstColumnapoc.cypher.doIt 的使用限制。

# Example unrestricting
dbms.security.procedures.unrestricted=apoc.cypher.runFirstColumn,apoc.cypher.doIt