PyMongo使用错误认证库仍能获取客户端且无法读写test库?
问题1解答
你能拿到MongoClient实例不代表已经通过admin库完成身份认证:
PyMongo初始化MongoClient时默认采用延迟认证逻辑,构造客户端阶段只会和服务端建立基础TCP连接,不会立刻执行身份校验,只要MongoDB端口可连通,不管传入的认证信息、认证源是否正确,都能生成MongoClient实例。
另外MongoDB的用户是和创建时的数据库绑定的(该数据库称为用户的认证源authSource),你在test库下创建的user1仅存在于test库的用户集合中,admin库没有该用户的记录,根本不可能通过admin库完成认证。
问题2解答
无法对test库执行读写是因为认证源配置错误:
你的连接URI末尾指定了/admin,相当于默认将admin作为认证源校验用户身份,服务端在admin库中找不到user1的记录,等到你实际执行读写操作触发认证流程时,会直接认证失败,自然没有对应操作权限。
正确连接示例
你需要在连接时指定test作为认证源,两种常用写法如下:
# 写法1:URI中直接指定默认操作库为test,自动以test为认证源 my_client = MongoClient("mongodb://user1:abc123@127.0.0.1:27017/test") # 写法2:显式指定authSource参数,适用默认操作库不是test的场景 my_client = MongoClient("mongodb://user1:abc123@127.0.0.1:27017/?authSource=test") # 后续操作test库 test_db = my_client.test
内容的提问来源于stack exchange,提问作者mark86v1
相关产品推荐
相关产品推荐

