MongoDB 2.0.14授权错误求助:执行listIndexes命令无权限
解决MongoDB授权错误(listIndexes命令未授权)
错误日志
[0] Unhandled rejection MongoError: (Unauthorized) not authorized on admin to execute command { listIndexes: "sessions", cursor: { } } [0] at MongoError.create (/Users/biggahd/Desktop/Mars-EMS-1/backend/node_modules/mongodb-core/lib/error.js:31:11) [0] at queryCallback (/Users/biggahd/Desktop/Mars-EMS-1/backend/node_modules/mongodb-core/lib/cursor.js:212:36) [0] at /Users/biggahd/Desktop/Mars-EMS-1/backend/node_modules/mongodb-core/lib/connection/pool.js:469:18 [0] at process.processTicksAndRejections (node:internal/process/task_queues:77:11)
问题背景
- 已在MongoDB Atlas自定义角色中开启
listIndexes权限,甚至开放所有操作,仍触发上述授权错误 - 强制使用MongoDB 2.0.14版本,怀疑是版本兼容问题
- 使用Sails.js v1.5.7
排查与解决步骤
1. 确认权限范围匹配
错误提示在admin库上无权限执行listIndexes,需检查:
- 自定义角色是否明确对
admin库(而非仅业务库)授予权限 - 角色权限的作用范围是否设置为「所有数据库」,或至少包含
admin库
2. 版本兼容性问题(核心排查点)
MongoDB 2.0.14是2012年发布的老旧版本,与MongoDB Atlas的现代权限系统存在根本性不兼容:
- 早期MongoDB的授权逻辑与当前Atlas的角色权限模型差异极大,旧版本驱动无法正确识别Atlas的权限配置
- Atlas集群默认不支持如此老旧的客户端协议,权限校验环节会出现异常
建议:
- 若业务允许,优先升级MongoDB版本至3.0+,这是解决问题的根本方案
- 若必须保留2.0.14版本,放弃Atlas托管,改用本地部署的MongoDB 2.0.14,避免跨版本权限模型冲突
3. 检查Sails.js连接配置
确认Sails.js的MongoDB连接配置:
- 连接字符串是否正确携带认证信息,格式示例:
mongodb://<user>:<password>@<host>:<port>/<db>?authSource=admin - 确认
authSource参数设置为admin,MongoDB 2.0默认使用admin库作为认证源 - 若业务操作目标不是
admin库,需确保角色对目标库也有对应权限
4. 手动验证用户权限
通过Mongo Shell连接集群,执行命令验证用户权限细节:
use admin db.runCommand({ usersInfo: "<你的用户名>", showPrivileges: true })
查看返回结果中是否包含listIndexes权限,且作用范围覆盖sessions集合或admin库。
内容的提问来源于stack exchange,提问作者Dženis H.
相关产品推荐
相关产品推荐

