2017-01-20 2 views
0

[! [Введите описание изображения здесь] [1]] [1] Привет им пытаются подключиться к MongoDB через код питонаподключения к MongoDB с аутентификацией с помощью PyMongo 2.7

client = MongoClient("mongodb://username:[email protected]/mydatabase-1") 
db = client['mydatabase-1'] 

и или

connection = MongoClient('localhost', 27017) 
db = connection['mydatabase-1'] 
db.authenticate('username', 'mypassword') 

uri = "mongodb://username:[email protected]/mydatabase-1" 
client = MongoClient(uri) 

, но я постоянно получаю ту же ошибку, бесперебойно

ConfigurationError: command SON([('authenticate', 1), ('user', u'CEI'), ('nonce', u'950483ef6634f14'), ('key', u'76f0102585a7571d96dace50d7aca5a6')]) failed: auth failed 

Я использую PyMongo 2.7 с Python 2.7. Я предполагаю, что это означает, что я работаю с механизмом = «MONGODB-CR»

Я могу использовать эти учетные данные для подключения к базе данных MongoDB с использованием MongoChef (GUI), и он отлично работает.

Я попытался обновить pymongo, и он находится в версии 2.7. Я не могу использовать более высокую версию, потому что у меня есть python 2.7. Я не могу найти больше решений в Интернете. Из того, что я прочитал на сайте MongoDB, он должен работать с механизмом = «MongoDB-CR», но не для механизма = «SCRAM-SHA-1» из-за того v2.7

имеют MongoDB работает с использованием

E:\MongoDB\bin\mongod.exe --auth --port 27017 --dbpath E:\Data\db 

и настроить пользователя с помощью

use admin 
db.createUser(
    { 
    user: "username", 
    pwd: "mypassword", 
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] 
    } 
) 

UPDATE !!!!!!!!!!!!!!!!!!!!!!!!!!

удалось получить pymongo 3.4, используя установку pip. Но все же получение этого сообщения

runfile('C:/Users/mdb_emr_syn/untitled0.py', wdir='C:/Users/mdb_emr_syn') 
Traceback (most recent call last): 

    File "<ipython-input-19-2ecc66a5cadd>", line 1, in <module> 
    runfile('C:/Users/mdb_emr_syn/untitled0.py', wdir='C:/Users/mdb_emr_syn') 

    File "C:\Program Files\Anaconda2\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile 
    execfile(filename, namespace) 

    File "C:\Program Files\Anaconda2\lib\site-packages\spyder\utils\site\sitecustomize.py", line 87, in execfile 
    exec(compile(scripttext, filename, 'exec'), glob, loc) 

    File "C:/Users/mdb_emr_syn/untitled0.py", line 11, in <module> 
    connection.yo.authenticate("CEI","Syn12345.") 

    File "C:\Program Files\Anaconda2\lib\site-packages\pymongo\database.py", line 1048, in authenticate 
    connect=True) 

    File "C:\Program Files\Anaconda2\lib\site-packages\pymongo\mongo_client.py", line 505, in _cache_credentials 
    sock_info.authenticate(credentials) 

    File "C:\Program Files\Anaconda2\lib\site-packages\pymongo\pool.py", line 523, in authenticate 
    auth.authenticate(credentials, self) 

    File "C:\Program Files\Anaconda2\lib\site-packages\pymongo\auth.py", line 470, in authenticate 
    auth_func(credentials, sock_info) 

    File "C:\Program Files\Anaconda2\lib\site-packages\pymongo\auth.py", line 450, in _authenticate_default 
    return _authenticate_scram_sha1(credentials, sock_info) 

    File "C:\Program Files\Anaconda2\lib\site-packages\pymongo\auth.py", line 201, in _authenticate_scram_sha1 
    res = sock_info.command(source, cmd) 

    File "C:\Program Files\Anaconda2\lib\site-packages\pymongo\pool.py", line 419, in command 
    collation=collation) 

    File "C:\Program Files\Anaconda2\lib\site-packages\pymongo\network.py", line 116, in command 
    parse_write_concern_error=parse_write_concern_error) 

    File "C:\Program Files\Anaconda2\lib\site-packages\pymongo\helpers.py", line 210, in _check_command_response 
    raise OperationFailure(msg % errmsg, code, response) 

OperationFailure: Authentication failed. 

любые идеи относительно того, почему ????? спасибо ребята

+0

Я не уверен, что это опечатка в вашем вопросе, но у вас есть значение '.' (точка) в вашем значении пароля URI. Если это опечатка, пожалуйста, обновите свой вопрос. Благодарю. –

ответ

0

Обновление PyMongo. Просто потому, что вы используете Python 2.7, это не значит, что вы должны использовать PyMongo 2.7. PyMongo 3.4.0 - это последняя версия, и она работает со всеми версиями Python.

+0

когда я пытаюсь установить pymongo 3.4.0, установка wizzard говорит мне что-то вроде, у вас нет установленного на вашем компьютере python 3.4 ..... а затем мне нужно закрыть мастер ...... –

+0

У меня есть отредактировал вопрос, чтобы включить фотографию того, что я получаю, когда пытаюсь установить pymongo 3.4 :) –

+0

также при попытке pip install update pymongo обновляется до версии 2.7 –

1

Я совершенно новый в MongoDB, и я только что прошел через это.

Надеюсь, что эта помощь поможет другим, как я.

# version info 

mongodb : 3.4.7 
python : 2.7 
pymongo : 3.5.1 

В моем случае, причина я Authentication failed в том, что у меня не было каких-либо пользователя, созданного в db, который я хотел получить доступ.

Я могу проверить пользователя с помощью db.getUsers() в оболочке mongodb.

> use mydatabase-1 
switched to db mydatabase-1 
> db.getUsers() 
[ ] 

И она пуста.

Так что я узнал:

После создал db и поставить некоторые docs в collection, должны также createUser() для этого db, чем PyMongo может получить доступ.

В MongoDB оболочке, продолжить, например, из исходной записи.

имя БД: mydatabase-1

> use mydatabase-1 
switched to db mydatabase-1 
> db.createUser(
... { 
... user: "username", 
... pwd: "myPWD", 
... roles: [ { role: "readWrite" } ] 
... } 
...) 
Successfully added user: { "user" : "username", "roles" : [ "readWrite" ] } 

И чем, В питона

Чтобы получить доступ к db, это сделать ...

client = MongoClient("mongodb://username:[email protected]:port/mydatabase-1") 
db = client['mydatabase-1'] 

Или это

connection = MongoClient('localhost', port) 
db = connection['mydatabase-1'] 
db.authenticate('username', 'myPWD') 

И чем, печать документ из коллекции my_collection_name

cursor = db.my_collection_name.find() 
for doc in cursor: 
    print doc 

Это должно решить Authentication failed.

Смежные вопросы