#11991·LocalAI

代理池 Postgres DSN 以明文形式记录,包括密码,而 auth DSN 则被修剪

作者: 66656c6c6f7574创建于 2026年9月12日更新于 2026年9月12日

问题描述 LocalAI 版本 v4.9.0(localai/localai:latest-gpu-nvidia-cuda-12, 修订版 f7ad3f70eb5d8a0ddf80e08557f0d7df28cf032e) 当代理池使用 Postgres 向量引擎时,LocalAI 会在 INFO 级别记录完整的 LOCALAI_AGENT_POOL_DATABASE_URL,包括数据库密码的明文,每次打开集合时。在同一日志流中,对授权数据库 URL 进行了正确的修改,因此修改助手已经存在。只是没有在该路径上应用。已修改(正确的),来自 LOCALAI_AUTH_DATABASE_URL: INFO 启用数据库="PostgreSQL://%2A%2A%2A:%2A%2A%2A@postgres:5432/localai_auth?sslmode=disable" 未修改,来自 LOCALAI_AGENT_POOL_DATABASE_URL(密码在粘贴此处之前手动替换): INFO PostgreSQL 集合集合名称="AML" 数据库 URL="PostgreSQL://localai_user:REDACTED-PASSWORD@postgres:5432/localai?sslmode=disable" 每次启动时,每个集合都会发出一行,因此凭据被重复并保存在任何收集容器日志中。在 Docker 部署中,它们存储在 json-file 驱动程序下的磁盘上,任何人都可以通过管理 UI 读取容器日志,而无需访问环境或 compose 文件。 ### 重现问题 1. 设置 LOCALAI_AGENT_POOL_VECTOR_ENGINE=postgresLOCALAI_AGENT_POOL_DATABASE_URL=PostgreSQL://user:password@host:5432/db?sslmode=disable 2. 至少定义一个代理集合 3. 启动 LocalAI 并读取日志。 PostgreSQL collection 行包含密码原文。 ### 预期行为 代理池 DSN 应在日志中以与授权 DSN 相同的方式进行修改,或者日志行应仅打印主机、端口和数据库名称,而不是整个 URL。 ### 额外上下文 不可从外部配置:值必须是 DSN,因此操作员无法避免使用 Postgres 向量引擎,除非不使用该引擎。轮换密码无法帮助,因为新密码也会被记录。 建议的修复:在记录之前,对代理池 DSN 使用与授权 DSN 相同的修改。