本文详解 nestjs + prisma 项目中连接 mongodb 时出现 `scram failure: authentication failed` 错误的根本原因及快速修复方法,核心是正确配置 `authsource` 参数。
在使用 Prisma 与 MongoDB 集成的 NestJS 项目中,执行 npx prisma db push 时遇到如下错误:
Error: MongoDB error SCRAM failure: Authentication failed.
该错误并非密码错误或服务未启动所致,而是 MongoDB 的认证机制要求明确指定用于验证凭据的数据库(即 authSource)。默认情况下,Prisma 会尝试在连接字符串中指定的目标数据库(如 test)内查找用户凭证;但实际中,MongoDB 用户通常是在 admin 数据库中创建并管理的——尤其当使用 mongod 默认配置或 Docker 官方镜像时。
✅ 正确做法是在 DATABASE_URL 中显式添加 authSource=admin 查询参数。修改 .env 文件中的连接字符串如下:
DATABASE_URL="mongodb://user:password@localhost:27017/test?authSource=admin&authMechanism=SCRAM-SHA-1"
? 补充说明: authSource=admin:告知 MongoDB 从 admin 数据库读取用户认证信息; authMechanism=SCRAM-SHA-1:虽为 MongoDB 4.0+ 默认机制,显式声明可提升兼容性与可读性; 若你确实在 test 库中创建了用户(不推荐),则应设为 authSource=test,但生产环境强烈建议统一使用 admin 作为认证源。
? 其他注意事项:
完成配置后,再次执行:
npx prisma db push
即可成功同步 Schema —
— 认证问题将彻底解决。这一配置是 Prisma + MongoDB 生产就绪的关键一步,建议纳入项目初始化检查清单。