MongoDB连接字符串是否需要ReplicaSet中每个服务器的身份验证详细信息?

问题描述 投票:1回答:1

我们发现,在将主要故障转移到它之后,我们的辅助设备未正确进行身份验证。我们有2个MongoDB服务器(v3.4)都在replicaset中正确设置:

mongo1:27017
mongo2:27017

我们的连接字符串(对于Node.js的MongoDB驱动程序v2.2.19)是这样的:

mongodb://username:password@mongo1,mongo2/db?replicaSet=rs0

现在,我们的主要失败了,次要的,mongo2当选为初选。但是,DB调用因“未授权”错误而失败。所以我再看一下MongoDB文档:

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

它看起来很模糊,每个主机都需要username:password吗?但这很奇怪,因为它们都被复制,因此用户应该是相同的,对吧?

我甚至尝试过,在应用程序中使用此连接字符串:

mongodb://username:password@mongo1,username:password@mongo2/db?replicaSet=rs0

但那失败了:Error: Username with password containing an unescaped colon

用户名和密码是字母数字,因此该样式URI似乎存在解析问题。但是对于原版,它没有正确验证。所以这些问题似乎相互矛盾。我已在独立模式下验证用户是否存在于两台服务器上,并且具有适当的权限。所以我不确定问题出在哪里。我发现另一个very similar question与不同的驱动程序,但没有答案:(

node.js mongodb replicaset
1个回答
0
投票

好吧,我永远无法理解这一点,但更新Node.js驱动程序(v2.2.19 - > v2.2.33)似乎已修复它。我没有在changelog中看到任何相关内容,我对比较差异感兴趣不够。 C'est la vie de programming。

© www.soinside.com 2019 - 2024. All rights reserved.