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

时间:2017-12-08 19:13:37

标签: node.js mongodb replicaset

我们发现我们的辅助服务器在主要故障转移后未正确进行身份验证。我们在复制集中正确设置了2个MongoDB服务器(v3.4):

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有一个不同的驱动程序,但没有答案:(

1 个答案:

答案 0 :(得分:0)

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