必须先在无认证状态下创建admin库的root用户再启用authorization,否则无法登录;创建时role必须为{role:"root",db:"admin"},配置需正确缩进并重启服务验证。

MongoDB 初次安装后默认不启用认证,admin 库存在但为空,必须先创建具备全局权限的管理员用户,再开启 authorization: enabled,否则会锁死自己。
为什么必须先在无认证状态下操作 admin 库
启用认证后,所有数据库操作(包括 use admin)都需先通过 db.auth(),而首次没有用户就无法登录。所以必须在配置开启前、服务未加 --auth 时完成用户创建。
常见错误现象:开启认证后才去 mongo 连接,执行 use admin 成功,但一运行 db.createUser 就报 MongoServerError[Unauthorized]: command createUser requires authentication —— 这说明已经晚了。
- 确保 MongoDB 正在以无认证模式运行(没加
--auth,且mongod.conf中security.authorization未启用或被注释) - 用
mongo或mongosh直连(不带-u/-p) - 必须先执行
use admin,因为root角色只能绑定到admin数据库
db.createUser() 创建 root 用户的关键参数
角色必须写成 {role: "root", db: "admin"},不能省略 db 字段,也不能写成 db: "test" 或其他库名——否则权限不会覆盖全部数据库。
示例命令:
use admin
db.createUser({
user: "mongoadmin",
pwd: "StrongPass2026!",
roles: [{ role: "root", db: "admin" }]
})
注意点:
-
pwd字段在 MongoDB 4.0+ 仍可用,但 6.0+ 已弃用,建议改用password(兼容性起见,当前用pwd更稳妥) - 密码强度必须满足服务端要求(如含大小写字母+数字+特殊字符),否则创建失败并提示
Password must contain at least one uppercase letter, one lowercase letter, one digit, and one special character - 不要用简单密码如
123456,开启认证后若被爆破,等同于开放整个实例
开启认证前必须修改的配置项
编辑 /etc/mongod.conf(Linux)或 mongod.cfg(Windows),在 security 段落下取消注释并设为 enabled:
security: authorization: enabled
关键细节:
- YAML 对缩进敏感,
authorization必须顶格对齐在security:下,不能多空格也不能少空格 - 如果配置文件里已有
#security:全行被注释,需先去掉#,再添加子项 - 改完不重启服务,配置不会生效;重启前建议先
mongod --config /etc/mongod.conf --dryRun验证语法
验证 root 用户是否生效的两种方式
重启 mongod 后,直接 mongo 连接会进入受限 shell(show dbs 返回空或报错),这时要确认用户是否可用。
推荐验证路径:
- 方式一(连接时认证):
mongosh -u mongoadmin -p StrongPass2026! --authenticationDatabase admin,成功即进入 shell - 方式二(连接后认证):
mongosh→use admin→db.auth("mongoadmin", "StrongPass2026!"),返回{ ok: 1 }即成功 - 执行
db.runCommand({connectionStatus: 1})查看authInfo中的authenticatedUsers是否包含该用户
容易被忽略的是:即使 db.auth() 返回 1,也不代表能访问其他库——必须用 use otherdb 后再试 db.collection.find(),因为 root 权限是全局的,但 shell 默认上下文仍在 test 库,不切换库就查不到数据。











