Python 使用docker进行PyMongo身份验证
我在验证MongoDB中新创建的用户时遇到一些问题。我的设置是容器中的MongoDB 4.4.2和python 3.8 我创建了一个用户,如下所示:Python 使用docker进行PyMongo身份验证,python,mongodb,authentication,pymongo,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[D
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:身份验证失败。
我可以通过容器内的shell进行连接,但不能通过pymongo进行连接,并且我已经尝试通过指定身份验证方法和身份验证数据库进行连接,但到目前为止,这两种方法都不起作用
任何提示都将不胜感激 两个问题
test
数据库中创建用户;默认情况下,如果未指定authSource
,MongoDB将在admin
数据库中查找凭据。因此,您需要将/?authSource=test
附加到连接字符串中
TestPwd
创建帐户,但在连接字符串上有TestPwd
;所以这不会进行身份验证
TestPwd
,那么您的连接字符串应该是:
mongodb://TestUser:TestPwd@172.20.0.3:27017/test?authSource=test
两个问题
test
数据库中创建用户;默认情况下,如果未指定authSource
,MongoDB将在admin
数据库中查找凭据。因此,您需要将/?authSource=test
附加到连接字符串中
TestPwd
创建帐户,但在连接字符串上有TestPwd
;所以这不会进行身份验证
TestPwd
,那么您的连接字符串应该是:
mongodb://TestUser:TestPwd@172.20.0.3:27017/test?authSource=test
目前还不清楚您正在对哪个数据库进行身份验证。您可以使用
authSource=test
设置authenticationDatabase。这会将您的URI带到mongodb://TestUser:testPwd@172.20.0.3:27017/?authSource=测试
。根据文档:哦,伙计,在我的实验中,我一直在设置authSource=system
,因为它在system.users
中,这个条目存在,但我完全忽略了authSource
是我试图连接到的数据库这一点。非常感谢@RobertSeamanIt不清楚您要对哪个数据库进行身份验证。您可以使用authSource=test
设置authenticationDatabase。这会将您的URI带到mongodb://TestUser:testPwd@172.20.0.3:27017/?authSource=测试
。根据文档:哦,伙计,在我的实验中,我一直在设置authSource=system
,因为它在system.users
中,这个条目存在,但我完全忽略了authSource
是我试图连接到的数据库这一点。非常感谢@robertseamanidect,我重新编写了另一个连接字符串,而不是复制粘贴它。我的错!在你的回答中,tho,我想你指的是端口27017,不是27019。哦,是的,对不起,27017-编辑了它。很高兴你让它工作。事实上,我重新编写了另一个连接字符串,而不是复制粘贴它。我的错!在你的回答中,tho,我想你指的是端口27017,不是27019。哦,是的,对不起,27017-编辑了它。很高兴你让它工作了。