MongoDB 3.0开启认证后Compass无法查看数据及集合问题排查求助
解决MongoDB 3.0开启认证后Compass无法查看数据的问题
我之前也碰到过一模一样的情况,大概率是权限配置或者Compass连接设置的细节没处理好,咱们一步步来排查:
1. 确认全局管理员的权限覆盖范围
首先要明确:MongoDB的用户是数据库级绑定的,你的全局管理员账号应该是在admin库下创建的对吧?虽然root角色默认拥有全库权限,但如果是手动创建的管理员账号,可能漏加了跨库访问的权限。
你先通过MongoDB shell(3.0用mongo命令,新版用mongosh)登录验证:
# 切换到admin库认证 use admin db.auth("你的管理员账号", "密码") # 查看当前用户的完整权限 db.runCommand({usersInfo: "你的管理员账号", showPrivileges: true})
如果发现账号只有admin库的权限,没有其他数据库的读写权限,给它补上全库权限:
use admin db.grantRolesToUser("你的管理员账号", [ { role: "readWriteAnyDatabase", db: "admin" }, { role: "userAdminAnyDatabase", db: "admin" } ])
2. 检查Compass的连接认证配置
这是最容易踩坑的点!因为你的管理员账号是在admin库创建的,所以Compass连接时:
- 认证方式选
Username/Password - 填写账号密码后,必须把Authentication Database设为
admin,而不是你要访问的目标业务数据库
很多人会误选目标数据库作为认证库,导致认证通过后没有访问该库的权限,自然看不到任何集合和数据。
3. 验证数据库本身是否存在数据
有时候可能是你误以为数据库有数据,但实际开启认证前的数据并没有正确保留?你可以通过shell登录后,切换到目标库确认:
use 你的目标数据库名 show collections # 查看集合数据量 db.你的集合名.count()
如果这里能看到数据,那肯定是Compass的连接配置问题;如果这里也看不到,那就要排查数据本身是否被误删,或者开启认证前的写入是否有问题。
4. 查看MongoDB日志定位细节
如果上面的步骤都没解决,去看MongoDB的日志文件(默认路径比如/var/log/mongodb/mongod.log),找权限相关的错误信息,比如:
command testdb.find requires authentication
或者更详细的权限拒绝日志,这能帮你精准定位是哪个权限缺失导致的问题。
内容的提问来源于stack exchange,提问作者Lightning Snake
相关产品推荐
相关产品推荐

