我正在尝试使用身份验证连接到mongodb数据库。我这样做的代码如下:
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:pass@ip:port/')
我收到了同样的错误。
答案 0 :(得分:2)
导致Authentication
失败的原因有很多。
首先检查您是否允许使用ip进行绑定。使用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]
答案 1 :(得分:0)
通常,如果用户名和密码中包含需要转义的字符,则必须将其转义百分比 - 但Satish的答案中的方法实际上应该让您不必担心。但是,如果您想尝试使用百分比转义方法,如PyMongo 3.5.1 docs中所述,您可以按照以下方式执行此操作(python 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:%s@127.0.0.1' % (username, password))
这将默认在'test'数据库中进行身份验证。要在特定数据库中进行身份验证,请执行以下操作
MongoClient('mongodb://user:password@example.com/[YOUR DB]?[AUTH MECHANISM]')
对于Python 2,你使用“urllib.quote_plus()”来逃避百分比。