Pymongo auth error in python script

I installed mongodb and enabled auth. and his working find. I can connect it from a remote laptop using the robomongo app:

Host: SERVER_IP PORT: 27017 DATEBASE: prod-db USERNAME: user_name PASS: user_password Auth Mechanism: MONGODB-CR 

and we can connect locally to the server shell using:

 $ mongo prod-db -u user_name -p user_password 

Everything works fine, but when we try to use the pymongo api. Authentication failed. below is the python code:

 from pymongo import MongoClient client = MongoClient() client.prod_db.authenticate('user_name', 'user_password', mechanism='MONGODB-CR') db = client.prod_db result = db.users.find() for document in result: print(document) 

Tools used:

 python 2.7 pymongo versiob 3.3.1 MongoDB shell version: 2.6.10 $ mongod --version db version v2.6.10 2016-10-31T16:34:59.868+0000 git version: nogitversion 2016-10-31T16:34:59.868+0000 OpenSSL version: OpenSSL 1.0.2g 1 Mar 2016 

Error tracing:

 Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python2.7/dist-packages/pymongo/database.py", line 1018, in authenticate connect=True) File "/usr/local/lib/python2.7/dist-packages/pymongo/mongo_client.py", line 444, in _cache_credentials sock_info.authenticate(credentials) File "/usr/local/lib/python2.7/dist-packages/pymongo/pool.py", line 343, in authenticate auth.authenticate(credentials, self) File "/usr/local/lib/python2.7/dist-packages/pymongo/auth.py", line 464, in authenticate auth_func(credentials, sock_info) File "/usr/local/lib/python2.7/dist-packages/pymongo/auth.py", line 439, in _authenticate_mongo_cr sock_info.command(source, query) File "/usr/local/lib/python2.7/dist-packages/pymongo/pool.py", line 239, in command read_concern) File "/usr/local/lib/python2.7/dist-packages/pymongo/network.py", line 102, in command helpers._check_command_response(response_doc, None, allowable_errors) File "/usr/local/lib/python2.7/dist-packages/pymongo/helpers.py", line 205, in _check_command_response raise OperationFailure(msg % errmsg, code, response) 

Solution: the problem is with the database name, the following code works fine:

 from pymongo import MongoClient client = MongoClient('mongodb://user_name: user_password@localhost :27017/prod-db') db = client['prod-db'] result = db.users.find() for document in result: print document 
+12
source share
2 answers

Try something like this:

 client = MongoClient("mongodb://user_name: user_password@SERVER _IP/prod-db") db = client['prod-db'] 
+28
source

Try below for MongoDB 4 :

Add authSource : this is the name of the database in which there is a collection with user credentials.

 client = MongoClient(host=hostname, port=port, username=user_name, password=password, authSource="Admin") db_obj = client[db_name] 
0
source

Source: https://habr.com/ru/post/1011891/


All Articles