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

Does the MongoDB connection string need the authentication details for each server in ReplicaSet?

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

mongo1:27017
mongo2:27017

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

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

现在,我们的主要节点失败了,而次要节点 mongo2 被选为主要节点。但是,数据库调用失败并出现 'not authorized' 错误。所以我又看了看 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 驱动程序 (v2.2.19 -> v2.2.33) 似乎已经解决了这个问题。我在变更日志中没有看到任何相关内容,而且我没有足够的兴趣来比较差异。 C'est la vie de programming.