You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyMongo连接MongoDB报错not authorized on db无权限排查

MongoDB PyMongo 报13未授权错误解决方法

你配置的数据库用户本身权限是足够的(dbOwner角色拥有所属库的全部操作权限,额外配置的readWrite属于冗余配置不影响使用),且相同连接串在Studio 3T中可正常查询,说明账号密码、网络连通性、authSource配置均无问题,报错由PyMongo驱动和服务端的兼容问题导致,按以下步骤逐一排查修复即可:

1. 修正连接串的认证机制配置

你当前连接串中强制指定了authMechanism=SCRAM-SHA-1,但你的用户同时支持SCRAM-SHA-1和SCRAM-SHA-256两种认证机制:

  • PyMongo 4.x版本对MongoDB 4.0+集群默认优先协商SCRAM-SHA-256认证,强制写死SCRAM-SHA-1会出现认证握手成功但执行操作时鉴权上下文不匹配的问题,Studio 3T会自动做降级适配所以不会触发该问题。
  • 先删除连接串中强制写死的authMechanism参数,让驱动自动和服务端协商认证方式,修改后连接串如下:
Connection_string= 'mongodb://user:password@cluster:111111/db?ssl=false&connectTimeoutMS=10000&authSource=db'

如果修改后仍报错,再显式指定使用SCRAM-SHA-256测试:

Connection_string= 'mongodb://user:password@cluster:111111/db?ssl=false&connectTimeoutMS=10000&authSource=db&authMechanism=SCRAM-SHA-256'

2. 修正代码中库和集合的引用方式

你当前代码中用client.db、db.collection_name的属性写法,是固定访问名为db的数据库、名为collection_name的集合,一旦实际业务库名、集合名和硬编码值不匹配,就会触发跨库访问的权限报错(你的账号仅有权限访问所属数据库)。
不要用属性硬编码,改用字典方式引用,避免写错名称,同时先做权限连通性校验:

from pymongo import MongoClient

# 替换为你实际的库名、集合名
target_db = "你的业务库名"
target_coll = "你要查询的集合名"

client = MongoClient(Connection_string)
db = client[target_db]
# 先测试连通性和权限,如果能正常返回集合列表说明认证完全正常
print("当前库下可访问的集合:", db.list_collection_names())
collection = db[target_coll]
cursor = collection.find({})
for r in cursor:
    print(r)

3. 修复PyMongo高版本和老集群的兼容问题

如果以上两步修改后仍报错,检查PyMongo版本:

  • PyMongo 4.x版本默认会在所有请求中携带lsid(会话ID)参数,就是你报错信息里看到的lsid: { id: UUID("xx") }字段,部分自建MongoDB 3.x、4.0早期版本集群无法识别该参数,会直接返回未授权错误。
  • 先在初始化MongoClient时加directConnection=True参数,关闭集群自动发现逻辑测试:
client = MongoClient(Connection_string, directConnection=True)
  • 如果还是报错,直接降级PyMongo到3.x最后一个稳定版本3.12.3,该版本默认不会强制携带lsid参数,兼容绝大多数老版本集群:
pip install pymongo==3.12.3

只要执行db.list_collection_names()能正常返回集合列表,就说明认证和权限完全正常,后续的查询操作不会再触发13未授权错误。

内容的提问来源于stack exchange,提问作者jedrek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 13:54:21