1

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 シェルから同じことを実行しても問題なく動作します。

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で同じことをしているときにこのエラーが発生する理由について何か考えはありますか?

4

1 に答える 1

1

理解した。これは、MongoClient() の初期化中に IP とポートを指定することで、クライアントがlocalhost 例外connection = MongoClient(ip, port)を使用して認証をバイパスしなかったために発生していました。localhost を使用して初期化すると、そのトリックが実行されます。connection = MongoClient()

于 2013-10-21T23:24:01.313 に答える