该报错表示:当前执行命令的 MongoDB 用户,在admin数据库(MongoDB 的系统管理数据库)中没有被授予执行该命令所需的权限,MongoDB 的访问控制(认证)机制拒绝了此次操作。
先从 MongoDB 日志中提取 2 个关键信息,精准定位问题:
示例日志片段:
2025-12-24T10:00:00.000+0800 E COMMAND [conn123] command admin.listDatabases requires authentication but user appuser is not authorized on admin to execute command { listDatabases: 1, lsid: { id: UUID("xxx") }, $db: "admin" }
首先需要用拥有root权限的用户登录(若没有 root 用户,先创建):
如果尚未创建管理员用户,需先关闭访问控制,创建 root 用户:
- 停止 MongoDB 服务:
- 修改 MongoDB 配置文件(
mongod.conf),关闭认证:
- 重启 MongoDB 服务:
- 本地无认证登录,创建 root 用户:
- 恢复认证配置:将
authorization改回enabled,重启 MongoDB 服务。
MongoDB 的权限遵循 “最小权限原则”,不要随意赋予 root,根据执行的命令选择对应角色:
重新用报错用户登录,执行原命令,检查是否报错:
-
认证数据库错误:
若用户创建在
admin库,必须用
mongosh admin -u 用户名 -p登录,而非
mongosh test -u 用户名 -p(即使要操作 test 库,认证仍需在 admin 库)。
-
角色赋予到错误数据库:
集群 / 全局类角色(如 clusterAdmin、readAnyDatabase)必须在
admin库赋予,不能赋予到业务库(如 appdb)。
-
use admin
db.revokeRolesFromUser("appuser", [{ role: "root", db: "admin" }])