代码之家  ›  专栏  ›  技术社区  ›  Nick

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

  •  1
  • Nick  · 技术社区  · 8 年前

    我们发现,在主服务器故障切换到次要服务器后,次要服务器没有正确进行身份验证。我们有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 使用不同的驱动程序,但没有答案:(

    1 回复  |  直到 8 年前
        1
  •  0
  •   Nick    8 年前

    嗯,除了更新节点之外,我永远也无法解决这个问题。js驱动程序(v2.2.19->v2.2.33)似乎已经修复了它。我在变更日志中没有看到任何相关内容,我也没有足够的兴趣来比较差异。这就是编程的生活。

    推荐文章