必须先创建管理员用户再启用认证,否则启用后无法连接和创建用户;需先关闭认证、在admin库创建含useradminanydatabase或root角色的管理员,再修改mongod.conf启用security.authorization: enabled并重启服务,最后通过--authenticationdatabase admin认证登录并创建业务用户。

必须先创建管理员用户,再启用认证;否则启用后将无法连接、无法创建任何用户。
先关认证,进 admin 创建管理员用户
启用认证前,MongoDB 不允许任何用户操作(包括创建用户)。所以第一步是确保当前以无认证模式运行:
- 检查配置文件
mongod.conf中是否注释或删除了security.authorization: enabled,或确认auth=false(旧版) - 重启服务:例如
sudo systemctl restart mongod(Linux)或 Windows 服务管理器中重启 - 用
mongo --port 27017直连,不带用户名密码 - 执行:
use admin<br>db.createUser({<br> user: "admin",<br> pwd: "StrongPass2026!",<br> roles: [{role: "userAdminAnyDatabase", db: "admin"}]<br>})
注意:密码必须满足强度要求(MongoDB 4.0+ 默认拒绝纯数字或短于 8 位的密码),且角色必须含 userAdminAnyDatabase 或 root 才能后续管理其他数据库用户。
改配置并重启,强制启用认证
认证不是靠命令行临时开关,而是由配置决定的持久行为。修改后不重启,设置无效:
- 编辑
mongod.conf,取消注释并设为:security:<br> authorization: enabled
(YAML 格式,冒号后必须有空格) - 旧版配置(如 3.6 及以前)可能用
auth=true,但 4.0+ 强烈建议用authorization: enabled - 保存后重启服务 —— 这一步失败最常见:如果配置语法错(比如缩进不对、冒号缺空格),
mongod会直接退出,日志里报Failed to parse config file - 验证是否生效:再用
mongo --port 27017尝试直连,应立即报错Error: command usersInfo requires authentication
用管理员登录后创建业务用户
认证启用后,所有操作都需先认证。管理员用户必须在 admin 库下认证,但可为其他库建用户:
- 登录:
mongo --port 27017 -u admin -p StrongPass2026! --authenticationDatabase admin - 切换到目标库(如
myapp),再创建用户:use myapp<br>db.createUser({<br> user: "app_user",<br> pwd: "AppPass2026!",<br> roles: ["readWrite"]<br>}) - 若需跨库权限(如只读另一个库),显式指定:
roles: [{role: "read", db: "reporting"}] - 不要省略
--authenticationDatabase admin参数——即使你连的是myapp,认证凭据仍存在admin库里
连接字符串和驱动里的 authSource 容易漏
应用代码里连 MongoDB,90% 的认证失败源于 authSource 配错:
- URI 示例:
mongodb://app_user:AppPass2026!@localhost:27017/myapp?authSource=admin -
authSource=admin是必须的,它告诉驱动:“去admin库查这个用户的凭证”,而不是去myapp库查 - Node.js 驱动中若用
auth选项对象,authSource字段不能写成authDb(老版本遗留写法已弃用) - Java 驱动中对应参数是
authSource=admin,不是authenticationDatabase=admin(后者是 shell 参数名,不通用)
真正容易卡住的地方是:配置改了、用户建了、连接 URI 看着没错,但少了一个 authSource=admin,结果报 Authentication failed 却查不出原因。











