【问题标题】:authentication error trying to initiate replica set in pymongo尝试在 pymongo 中启动副本集的身份验证错误
【发布时间】:2013-10-27 18:45:40
【问题描述】:

尝试从 python 脚本启动 mongodb 副本集,但在身份验证时遇到错误。

from pymongo import MongoClient

ip = 'zzz.zz.zzz.zz'
port = 27017
replica_set = 'yomama'

config = {
  '_id': replica_set,
  'members': [
    {'host': 'xxx.xx.xxx.xx',
     '_id': 0,
     'arbiterOnly': False},
    {'host': 'yyy.yy.yyy.yy',
     '_id': 1,
     'arbiterOnly': False},
    {'host': 'zzz.zz.zzz.zz',
     '_id': 2,
     'arbiterOnly': False},
  ],
}

connection = MongoClient(ip, port)
connection.admin.command('replSetInitiate', config)

运行此脚本会导致:

pymongo.errors.OperationFailure: command SON([('replSetInitiate', {'_id': 'yomama', 'members': [{'host': 'xxx.xx.xxx.xx', '_id': 0, 'arbiterOnly': False}, {'host': 'yyy.yy.yyy.yy', '_id': 1, 'arbiterOnly': False}, {'host': 'zzz.zz.zzz.zz', '_id': 2, 'arbiterOnly': False}]})])
failed: unauthorized

数据库上没有设置身份验证,从 mongo shell 运行相同的东西可以正常工作:

db.runCommand({replSetInitiate:{'_id': 'yomama', 'members': [{'host': 'xxx.xx.xxx.xx', '_id': 0, 'arbiterOnly': false}, {'host': 'yyy.yy.yyy.yy', '_id': 1, 'arbiterOnly': false}, {'host': 'zzz.zz.zzz.zz', '_id': 2, 'arbiterOnly': false}]}})
{
    "info" : "Config now saved locally.  Should come online in about a minute.",
    "ok" : 1
}

对使用 pymongo 执行相同操作时为什么会出现此错误有任何想法吗?

【问题讨论】:

  • 我很困惑,您的回复让我认为您确实设置了身份验证?我实际上正在尝试做类似的事情,所以我只是想知道您是否进行了身份验证设置

标签: python mongodb pymongo


【解决方案1】:

想通了。发生这种情况是因为通过在初始化 MongoClient (connection = MongoClient(ip, port)) 时指定 ip 和端口,客户端没有绕过使用 localhost exception 的身份验证。使用 localhost 初始化可以解决问题,例如connection = MongoClient().

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-09
    • 2019-10-28
    • 2016-11-12
    • 2018-09-28
    相关资源
    最近更新 更多