web-dev-qa-db-fra.com

échec de l'authentification pymongo dans le script python

J'ai installé mongodb et activé l'auth. et sa découverte de travail. Je peux le connecter depuis un ordinateur portable distant à l'aide de l'application robomongo:

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

et nous pouvons nous connecter à partir du shell du serveur localement en utilisant:

$ mongo prod-db -u user_name -p user_password

Tout fonctionne bien, mais lorsque nous l'essayons avec pymongo api. les authentifications ont échoué. ci-dessous est le code python:

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)

Les outils utilisés:

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

Trace d'erreur:

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: le problème était avec le nom de la base de données, le code suivant fonctionne bien:

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
17
sharafjaffri

Veuillez essayer quelque chose comme ceci:

client = MongoClient("mongodb://user_name:user_password@SERVER_IP/prod-db")
db = client['prod-db']
32
milos.ai

Pour pymongo,

Essayez ci-dessous pour MongoDB 4:

Ajouter authSource: il s'agit du nom de la base de données contenant la collection avec les informations d'identification de l'utilisateur.

Ex:

client = MongoClient(Host=<<hostname>>,
                     port=<<port>>, 
                     username=<<user_name>>, 
                     password=<<password>>,
                    authSource="admin")
db_obj = client[db_name]
2
Harsha Biyani