扩展安全

Neo4j 可以通过编写自定义代码来扩展,这些代码可以从 Cypher 中直接调用,如 Java 参考 → 用户定义过程Java 参考 → 用户定义函数 中所述。本页介绍如何确保这些新增内容的安全。

允许列表

允许列表可用于仅允许从较大库中加载少量扩展。建议使用最小权限原则加载扩展。此原则规定您只加载执行查询所需的那些过程和函数。

配置设置 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 目录中的所有库都将被加载。

解除限制

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

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

示例 2. 解除限制

在这个示例中,我们需要解除对过程 apoc.cypher.runFirstColumnapoc.cypher.doIt 的使用限制。

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