⌘+k ctrl+k
1.4 (LTS)
搜索快捷键 cmd + k | ctrl + k
保护扩展安全

DuckDB 拥有强大的扩展机制,其权限与运行 DuckDB(父)进程的用户相同。这引入了安全方面的考量。因此,我们建议审阅本页面列出的配置选项,并根据您的攻击模型进行相应设置。

DuckDB 签名检查

DuckDB 扩展在每次加载时都会根据二进制文件的签名进行检查。目前扩展分为三类:

  • core(核心)密钥签名。只有经 DuckDB 核心团队审查过的扩展才会使用这些密钥进行签名。
  • community(社区)密钥签名。这些是通过 DuckDB 社区扩展仓库分发的开源扩展。
  • 未签名。

扩展安全级别概览

DuckDB 为扩展提供了以下安全级别。

仅可使用已签名的扩展 描述 配置
core 只有使用 core 密钥签名的扩展才能被加载。 SET allow_community_extensions = false
corecommunity 只有使用 corecommunity 密钥签名的扩展才能被加载。 这是默认的安全级别。
任何扩展(包括未签名) 可以加载任何扩展。 SET allow_unsigned_extensions = true

与安全相关的配置设置具有自我锁定功能,即只能在当前进程中限制功能,而不能提升权限。

例如,尝试进行以下配置更改将导致错误:

SET allow_community_extensions = false;
SET allow_community_extensions = true;
Invalid Input Error: Cannot upgrade allow_community_extensions setting while database is running

社区扩展

DuckDB 拥有一个社区扩展仓库,方便安装第三方扩展。像 pip 或 npm 这样的社区扩展仓库本质上是为了实现远程代码执行。这听起来可能有些耸人听闻。无论好坏,我们都已经习惯了将网络上的随机脚本通过管道传输到 shell 中,并习惯性地安装海量的传递依赖项而不多加思考。像 CRAN 这样的一些仓库在某些环节会强制执行人工审查,但这也不能保证什么。

我们研究了几种不同的社区扩展仓库管理方法,并选择了我们认为合理的方法:我们不尝试对提交内容进行人工审查,但要求必须提供扩展的源代码。我们负责完整的构建、签名和分发流程。请注意,这比允许上传任意二进制文件的 pip 和 npm 更进一步,但比手动审查所有内容要宽松。我们允许用户举报恶意扩展,并显示 GitHub 星标和下载量等采用统计信息。由于我们管理该仓库,我们可以迅速从分发列表中移除有问题的扩展。

尽管如此,安装和加载来自社区扩展仓库的 DuckDB 扩展将会执行第三方开发者编写的代码,因此可能存在危险。恶意开发者可能会创建并注册一个看起来无害的 DuckDB 扩展来窃取您的加密货币。如果您正在运行一个使用 DuckDB 执行用户不受信任 SQL 的 Web 服务,我们建议禁用社区扩展。为此,请运行:

SET allow_community_extensions = false;

禁用已知扩展的自动安装和自动加载

默认情况下,DuckDB 会自动安装并加载已知扩展。要禁用已知扩展的自动安装,请运行:

SET autoinstall_known_extensions = false;

要禁用已知扩展的自动加载,请运行:

SET autoload_known_extensions = false;

要锁定此配置,请使用 lock_configuration 选项

SET lock_configuration = true;

始终要求已签名扩展

默认情况下,DuckDB 要求扩展要么被签名为核心扩展(由 DuckDB 开发人员创建),要么被签名为社区扩展(由第三方开发人员创建,但由 DuckDB 开发人员分发)。可以在启动时启用 allow_unsigned_extensions 设置以允许加载未签名扩展。虽然此设置对于扩展开发非常有用,但启用它将允许 DuckDB 加载任何扩展,这意味着必须更加小心,以确保不会加载恶意扩展。

© 2025 DuckDB 基金会,阿姆斯特丹,荷兰
行为准则 商标使用指南