我在虛擬機(ip:192.168.xx.xx)上創建了一個mongo的數據庫,裏面已經存好了內容。裏面的一個database叫作 "adb", 裏面有個collection, 叫作"acol"html
我打開了mongo的認證功能,而且把用戶"userA"授予了訪問"adb"的權限。python
而後,我用下面的方式鏈接mongodb
import pymongo host = '192.168.xx.xx' conn = pymongo.MongoReplicaSetClient('mongodb://%s:%s@%s' % ("userA", "password", host)) db = conn["adb"] collect = db["acol"]
結果報錯:數據庫
pymongo.errors.OperationFailure: command SON([('authenticate', 1), ('user', u''), ('nonce', u''), ('key', u'')]) on namespace admin.$cmd failed: auth failedapi
而後,各類糾結。後來看了官網,終於找到了解決方法。spa
http://api.mongodb.org/python/current/examples/authentication.htmlcode
1.查看pymongo版本: 結果爲3.2htm
pip list -v
2.查看mongoDB版本: 結果爲2.6blog
在mongo終端中輸入ip
db.version()
mongoDB有不一樣的認證機制,3.0版本之後採用的是'SCRAM-SHA-1', 以前的版本採用的是'MONGODB-CR'。因此,以個人版本狀況,顯然應該用'MONGODB-CR'
用下面的方法鏈接,就成功了。
host = '192.168.xx.xx' client = pymongo.MongoClient(host) client.adb.authenticate("userA", "password", mechanism='MONGODB-CR') db = client["adb"] collection = db["acol"]