保护扩展
Neo4j 可以通过编写自定义代码进行扩展,这些代码可以直接从 Cypher 调用,如Java 参考 → 用户定义过程和Java 参考 → 用户定义函数所述。本页描述了如何确保这些附加组件的安全性。
允许列表
允许列表可用于仅允许从较大库中加载少量扩展。建议使用最小权限原则加载扩展。该原则规定,您只加载执行查询所需的过程和函数。
配置设置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
,有几点需要注意
-
如果使用此设置,除了列出的扩展之外,不会加载任何其他扩展。特别是,如果将其设置为空字符串,则不会加载任何扩展。
|
解除限制
出于安全原因,默认情况下禁用使用内部 API 的过程和函数。在这种情况下,也建议使用最小权限原则,并且只解除您确定要使用的那些过程和函数的限制。
可以使用配置设置dbms.security.procedures.unrestricted
来解除过程和函数的限制。它定义了一个逗号分隔的列表,其中包含要解除限制的过程和函数。该列表可以包含完全限定的过程和函数名称,以及带有通配符 (*
) 表达式的部分名称。
在此示例中,我们需要解除对过程apoc.cypher.runFirstColumn
和apoc.cypher.doIt
的限制。
# Example unrestricting
dbms.security.procedures.unrestricted=apoc.cypher.runFirstColumn,apoc.cypher.doIt