MongoDB4.4.8集群mongoexport报SCRAM-SHA-1认证失败相关问题咨询
MongoDB 4.4.8 PSA 副本集问题解答
问题1:Shell 内 db.auth 认证失败、getUsers 返回空的原因
- 你使用
mongo -u ${USER} -p ${PASS}可以正常登录,是因为 mongo shell 未显式指定--authenticationDatabase参数时,默认使用admin库作为认证源,刚好匹配你用户的存储位置。 - 进入 shell 后默认停留在
test库,此时直接执行db.auth('admin','admin')会默认以当前所在的test库作为认证源,而你的用户存储在admin库中,因此认证失败。可以先执行use admin切换到admin库后再执行认证命令,即可成功。 test和bud库未创建独立用户,因此执行db.getUsers()返回空,切换到admin库执行该命令即可查询到所有用户信息。
问题2:mongoexport 本地调用认证失败根因
mongoexport 不指定完整连接串时,存在两处默认行为和副本集认证规则冲突:
- 默认仅连接
localhost:27017单节点,未携带副本集标识和节点列表,无法正确路由到副本集主节点完成认证。 - 即使单独指定
--username/--password/--authenticationDatabase参数,未同步指定--host为副本集名称/节点列表格式时,工具会按单节点模式做认证,和副本集的认证规则不匹配,因此报SCRAM认证失败。
你传入完整连接串时,连接串已经包含了副本集名称、节点地址、authSource等所有必要参数,工具会自动解析并按副本集规则完成认证,因此可以正常导出。
问题3:副本集创建用户是否需要全节点操作
不需要在所有节点单独操作。
MongoDB的用户、角色信息存储在admin库的system.users、system.roles集合中,属于集群常规数据,会通过副本集的oplog自动同步到所有数据节点(即主节点P和从节点S)。PSA架构中的仲裁节点A不存储任何业务数据和用户信息,无需同步。
仅需要连接到副本集主节点执行创建用户的操作,即可自动同步到所有数据节点,全集群均可使用该用户完成认证。
内容的提问来源于stack exchange,提问作者Leos Literak
相关产品推荐
相关产品推荐

