python - 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 进行连接,并且我已经尝试连接指定身份验证方法、身份验证数据库,但到目前为止都没有工作。
任何提示将不胜感激!
解决方案
两个问题。
正如评论者所说,您正在
test
数据库中创建用户;默认情况下,如果未指定,MongoDB 将在admin
数据库中查找凭据。authSource
因此,您需要附加/<optional database name>?authSource=test
到您的连接字符串。您使用密码创建帐户
TestPwd
,但使用您拥有的连接字符串testPwd
;所以这不会验证。
因此,假设您的密码绝对是TestPwd
,您的连接字符串应该是:
mongodb://TestUser:TestPwd@172.20.0.3:27017/test?authSource=test
推荐阅读
- mongodb - 为什么在 Mongodb (PyMongo) 中数据加载为 Nan
- python - 如何在 Django 中通过 modelformset_factory 验证?
- r - 带放回抽样的数据操作
- azure-data-factory - ADF:将输出转换为 JSON 格式
- javascript - PHP Datatable SearchPaneOptions Order By 不起作用
- javascript - d3.js 分层树中的直角链接样式
- sql - 大查询 | 根据运行总和为行分配数字
- latex - 在“groff eqn”中使用多个标记和排列对齐方程
- docker - Swagger 尝试在 HTTPS 上加载资源并失败
- javascript - Firebase 和反应单用户登录