错误command failed with error 13(unauthorized)不是密码错误,而是authsource、用户所在库、角色绑定库三者不一致;启动报“failed to find a suitable data directory”是系统级权限卡死,需查dbpath路径存在性、属主mongodb:mongodb及权限755,并用--dryrun验证yaml语法。

错误 Command failed with error 13 (Unauthorized) 不代表密码错了,而是权限链断在了某一层——必须分阶段验证 authSource、用户所在库、角色绑定库三者是否一致。
启动失败报 “Failed to find a suitable data directory” 怎么查
这不是 MongoDB 内部逻辑报的错,是进程连目录都进不去,说明系统级权限已卡死。
- 先用
grep "dbPath" /etc/mongod.conf找出配置路径,再执行ls -ld /var/lib/mongodb(替换成你的真实路径),看输出里用户组是不是mongodb:mongodb - 如果属主是
root:root或权限是700,服务一定起不来;正确做法是:chown -R mongodb:mongodb /var/lib/mongodb+chmod 755 /var/lib/mongodb -
dbPath:后面必须跟一个空格,dbPath: /var/lib/mongodb合法,dbPath:/var/lib/mongodb会导致解析失败且日志不报具体哪行错 - 用
mongod --config /etc/mongod.conf --dryRun验证配置,只有返回parsed successfully才算过关
连接后执行命令报 error 13 怎么定位
认证成功了,但授权没过。和密码无关,只和 authSource 与 roles.db 是否匹配目标库有关。
- 先确认用户在哪建的:用管理员账号连
mongosh "mongodb://localhost:27017/admin" -u root -p pwd,然后执行use admin; db.getUser("myuser"),看roles字段里的db值是不是你要操作的库(比如vms_trace_point) - 如果
roles是{"role":"readWrite","db":"admin"},但你要操作vms_trace_point,就得补授权:db.grantRolesToUser("myuser", [{role:"readWrite", db:"vms_trace_point"}]) - Spring Boot 的连接串里
authSource参数不能省:mongodb://user:pass@localhost:27017/vms_trace_point?authSource=admin—— 缺了它,MongoDB 默认去vms_trace_point库找用户,肯定找不到 - 用
mongosh连接时也得显式指定:mongosh "mongodb://localhost:27017/vms_trace_point" --authenticationDatabase admin
服务能启动但操作报 “not authorized on testdb to execute command” 怎么验证
说明用户存在、认证通过,但角色没覆盖当前操作所需的最小权限集——比如只给了 read 却执行 insert。
- 用管理员登录后,执行
use admin; db.getUser("myuser"),重点看返回里roles数组中是否有对应目标库的readWrite条目 - Windows 上要注意
LocalSystem账户对路径的访问限制,Linux 上还要检查 SELinux 上下文是否允许mongod访问自定义路径 - 角色不是继承的:给用户授予
readWrite到admin库,不代表它能操作vms_trace_point;每个库的权限必须单独授予
最容易被忽略的是:用户创建时所在的数据库(即 authSource)和角色里声明的 db 值,这两个字符串必须和你实际操作的数据库名完全一致——大小写、下划线、拼写,差一个字符都会触发 error 13。











