当前位置: 首页 > news >正文

MongoDB 连接时的**认证参数配置错误**

该错误是 MongoDB 连接时的认证参数配置错误,核心原因是 MongoCredential(认证凭证)中缺少“认证数据库名”(source 字段为空),导致 MongoDB 无法识别认证范围,最终连接超时失败。以下是分步解决方案:

一、错误核心原因解析

MongoDB 认证时需要明确“基于哪个数据库验证账号密码”(默认是 admin 数据库,除非手动在其他库创建账号)。你的连接代码中,MongoCredentialsource 字段为空(source=''),MongoDB 无法确定认证数据库,抛出“databaseName is not empty”异常,进而导致连接超时。

二、解决方案:补充“认证数据库名”

根据 MongoDB 账号的创建场景(默认 admin 库或自定义库),分两种情况配置连接:

1. 情况1:账号在默认 admin 库创建(最常见)

若你的 root 账号是在 admin 数据库下创建的(MongoDB 默认管理员账号存储在 admin 库),连接时需指定 source="admin"(即认证数据库为 admin)。

示例代码(Java 驱动为例):
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import java.util.Arrays;public class MongoConnTest {public static void main(String[] args) {// 1. 配置认证信息:必须指定 source(认证数据库名,这里是 admin)MongoCredential credential = MongoCredential.createCredential("root",          // 用户名"admin",         // 认证数据库名(关键!不能为空,默认填 admin)"你的密码".toCharArray()  // 密码);// 2. 配置服务器地址(localhost:27017)ServerAddress serverAddress = new ServerAddress("localhost", 27017);// 3. 建立连接MongoClient mongoClient = new MongoClient(serverAddress, Arrays.asList(credential));// 4. 测试连接(查询数据库列表,无异常则成功)System.out.println(mongoClient.listDatabaseNames().into(new ArrayList<>()));}
}
2. 情况2:账号在自定义数据库创建(非 admin 库)

若你的 root 账号是手动在其他数据库(如 mydb)下创建的(例如 use mydb; db.createUser(...)),则 source 需填该自定义数据库名(如 source="mydb")。

示例(以自定义库 mydb 为例):
// 认证数据库改为自定义的 mydb
MongoCredential credential = MongoCredential.createCredential("root", "mydb",  // 自定义认证数据库名"你的密码".toCharArray()
);

三、额外排查步骤(确保基础环境正常)

  1. 确认 MongoDB 服务已启动
    执行命令检查服务状态(Windows):net start MongoDB;(Linux):systemctl status mongod,确保服务处于“运行中”。

  2. 验证账号密码正确性
    通过 mongo shell 手动登录,确认账号密码无误:

    # 1. 连接 MongoDB(先不认证)
    mongo localhost:27017# 2. 切换到认证数据库(如 admin)
    use admin# 3. 执行认证(替换为你的账号密码)
    db.auth("root", "你的密码")# 若返回 1 表示认证成功;返回 0 表示账号/密码错误
    

    db.auth 返回 0,需先重置密码(如 db.changeUserPassword("root", "新密码"))。

  3. 检查端口是否被占用
    执行命令查看 27017 端口是否被 MongoDB 占用(Windows):netstat -ano | findstr "27017";(Linux):netstat -tuln | grep 27017,确保端口未被其他程序占用。

四、总结

该错误的关键修复点是给 MongoCredential 补充“认证数据库名”(source 字段),默认填 admin(99% 的场景适用),若账号在自定义库创建则填对应库名。补充后重新连接,即可解决“databaseName is not empty”和连接超时问题。

http://www.dtcms.com/a/446138.html

相关文章:

  • 大兴安岭做网站葫芦岛建设工程信息网站
  • 商标设计网站提供哪些服务建筑书店
  • 除 OpenAI/GPT-4o 等主流头部产品外,值得关注的 AI 及 Agent 产品有哪些?
  • Vue 3 —— M / 接口文档
  • 【办公类-109-06】20250916圆牌卡片15CM手工纸+动物头像+拼音表+word单面编辑
  • 服务器搭建网站制作网站怎么用图片做背景
  • 搭建网站空间无印良品vi设计分析
  • 做pc端网站资讯seo诊断工具有哪些
  • 高层次综合基础-vivado hls第三章
  • 网站建设单位不给数据库苏州网络公司工作室
  • windows部署网站phpwordpress教程网页修改
  • 前端GIS篇——WebGIS、WebGL、Java后端篇
  • 网站开发语言分析网站制作想法
  • 做抽奖网站合法吗网站底部备案代码
  • 基于SGLang的推理服务业务实战部署方案(直接可用)
  • 秦皇岛seo网站推广吉林省吉林市是几线城市
  • [ Spring 框架 ] 数据访问和事务管理
  • 云南建设注册考试中心网站appwordpress域名修改数据库
  • Coze源码分析-资源库-编辑知识库-后端源码-IDL/API层
  • 机器学习周报十六
  • 怎么免费制作企业网站找人做个网站大概多少钱
  • 凡科建站自助建站平台定制手机壳的网站
  • 实战 | 使用 Chrome 开发者工具修改网页源码跳过前端校验
  • 汕头网站时优化php 网站版面素材
  • 生活小记呀
  • 身份治理技术的演进之路:从手动管理到智能自动化
  • 嵌入式第六十六天(I2C子系统架构)
  • 长春网络建站益阳做网站
  • 在线网站备案网页设计师培训费用图片大全
  • stp root primary 概念及题目