2017-04-03 29 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:驗證失敗。

我在做錯誤的整個認證的事情?

編輯:還試圖用以下模式:

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

而且我收到了同樣的錯誤。

回答

1

有很多原因可能導致Authentication失敗。

  • 首先檢查你是否允許你的ip用於bindip。使用0.0.0.0允許所有客戶端訪問MongoServer。

  • 通過機制也在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

通常你必須百分號逃避你的用戶名和密碼,如果有需要被轉義字符,但在薩蒂什南比亞的回答方法實際上應該讓你不必擔心這一點。但是,如果你想嘗試的百分比逃逸的方法,如PyMongo 3.5.1 docs概述,你可以做如下(蟒蛇3):

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)) 

這將默認爲「測試」驗證數據庫。要在特定數據庫進行身份驗證,而不是做

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

以下對於Python 2使用「urllib.quote_plus()」,以逃避百分比。