我在对 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 进行连接,而且我已经尝试连接指定的身份验证方法和身份验证数据库,但到目前为止都没有工作。
任何提示将不胜感激!
答案 0 :(得分:2)
两个问题。
正如评论者所指出的,您是在 test
数据库中创建用户;默认情况下,如果未指定 admin
,MongoDB 将在 authSource
数据库中查找凭据。因此,您需要将 /<optional database name>?authSource=test
附加到您的连接字符串。
您使用密码 TestPwd
创建帐户,但在连接字符串中您有 testPwd
;所以这不会通过身份验证。
因此,假设您的密码肯定是 TestPwd
,您的连接字符串应该是:
mongodb://TestUser:TestPwd@172.20.0.3:27017/test?authSource=test