2017-04-03 21 views
1

認証を使用してmongodbデータベースに接続しようとしています。そうするために私のコードは次のとおりです。mongodb pythonの認証

from pymongo import MongoClient 
import urllib 
client = MongoClient() 
client = MongoClient('ip', port) 
client.prod_db.authenticate('username', 'pass', source='source_database') 

私は認証ラインで次のエラー受け付けておりますしかし:

pymongo.errors.OperationFailure:認証に失敗しました。

私は間違って認証するのですか?

EDIT:はまた、次のスキーマを使用してみました:

client = MongoClient('mongodb://user:[email protected]:port/') 

をと私は同じ過ちを受けました。

答えて

1

Authenticationに失敗する原因はたくさんあります。

  • まず、ipにbindipを許可していることを確認します。すべてのクライアントがMongoServerにアクセスできるようにするには、0.0.0.0を使用してください。

  • も引数としてauthenticate()にあります。このような

何かが私の作品:

client = MongoClient('127.0.0.1', 27017) 
client.admin.authenticate('username', 'pass', mechanism = 'SCRAM-SHA-1', source='source_database') 
db_name = client[db] 
col_name = col_name 
col = db_name[col_name] 
+0

しかし、正確にどこにパスを追加していますか? – konstantin

+0

'mechanism = 'SCRAM-SHA-1' ' –

+0

残念ながら、同じエラーが発生しました。 – konstantin

0

一般的に、それはエスケープする必要が文字を持っている場合あなたがあなたのユーザ名とパスワードをパーセントエスケープしているが、サティシュの答えのメソッドが実際にすべきあなたはそれを心配しないでください。

from pymongo import MongoClient 
import urllib.parse 

username = urllib.parse.quote_plus('user') # username = 'user' 

password = urllib.parse.quote_plus('pass/word') # password = 'pass%2Fword' 

MongoClient('mongodb://%s:%[email protected]' % (username, password)) 

これは、「試験」のデータベースに認証がデフォルトになります:PyMongo 3.5.1 docsに概説されているようあなたは、パーセントエスケープ方法を試してみたい場合は、あなたは(のpython 3)を以下のようにすることを行う可能性があります。特定のデータベースで認証するには、あなたはパーセントエスケープに「urllib.quote_plusを()」を使用Pythonの2の場合は、次の代わりに

MongoClient('mongodb://user:[email protected]/[YOUR DB]?[AUTH MECHANISM]') 

を行います。