首页 > 解决方案 > PyMongo 使用 docker 进行身份验证

问题描述

我在验证 MongoDB 中新创建的用户时遇到了一些问题。我的设置是容器中的 MongoDB 4.4.2 和 python 3.8。

我创建了一个用户,如下所示:

from pymongo import MongoClient

host = "mongodb://root_user:root_password@172.20.0.3:27017"
DB_NAME = "test"
client = MongoClient(host)
test_db = client[DB_NAME]
test_db.command("createUser", "TestUser", pwd="TestPwd", roles=["readWrite"])

到目前为止,一切都很好:我只是将 添加TestUser到数据库test中,所以当我查询集合时client.system.users.find({'user': 'TestUser'}),我看到了测试用户db: test

现在如果我想测试这个用户连接

host = "mongodb://TestUser:testPwd@172.20.0.3:27017"

它显示身份验证失败:pymongo.errors.OperationFailure: Authentication failed.

我可以通过容器内的 shell 进行连接,但不能通过 pymongo 进行连接,并且我已经尝试连接指定身份验证方法、身份验证数据库,但到目前为止都没有工作。

任何提示将不胜感激!

标签: pythonmongodbauthenticationpymongo

解决方案


两个问题。

  1. 正如评论者所说,您正在test数据库中创建用户;默认情况下,如果未指定,MongoDB 将在admin数据库中查找凭据。authSource因此,您需要附加/<optional database name>?authSource=test到您的连接字符串。

  2. 您使用密码创建帐户TestPwd,但使用您拥有的连接字符串testPwd;所以这不会验证。

因此,假设您的密码绝对是TestPwd,您的连接字符串应该是:

mongodb://TestUser:TestPwd@172.20.0.3:27017/test?authSource=test

推荐阅读