使用 docker 进行 PyMongo 身份验证

时间:2020-12-19 23:17:58

标签: python mongodb authentication pymongo

我在对 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'}) 时,我看到测试用户使用 {{ 1}}。

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

db: test

显示身份验证失败:host = "mongodb://TestUser:testPwd@172.20.0.3:27017"

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

任何提示将不胜感激!

1 个答案:

答案 0 :(得分:2)

两个问题。

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

  2. 您使用密码 TestPwd 创建帐户,但在连接字符串中您有 testPwd;所以这不会通过身份验证。

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

mongodb://TestUser:TestPwd@172.20.0.3:27017/test?authSource=test
相关问题