MongoDB 4.0+ 已弃用 auth 参数,必须使用 security.authorization: enabled,否则配置无效且服务可能无法启动;需严格 YAML 缩进、重启生效,并预先创建管理员用户。

直接说结论:MongoDB 4.0+ 版本已弃用 auth 参数,必须改用 security.authorization: enabled,否则配置无效且服务可能无法启动。
为什么 auth 参数在 mongod.conf 中不生效
早期 MongoDB(如 2.6、3.2)支持在配置文件中写 auth = true,但该语法自 3.6 起被标记为废弃,4.0+ 完全移除。如果你在 mongod.conf 里写了 auth: true 或 auth = true,mongod 启动时会报错或静默忽略,导致你以为开了认证,实际仍处于无鉴权状态。
常见错误现象:
- 配置后重启服务没报错,但用
mongo不输密码就能连上 - 执行
db.runCommand({connectionStatus: 1})返回"authEnabled": false - 日志里出现
WARNING: The 'auth' option is deprecated. Please use 'security.authorization' instead.
正确配置 security.authorization 的位置和格式
必须确保 YAML 格式严格对齐,缩进错误会导致 mongod 拒绝启动。典型配置段落如下(仅需添加/修改这部分):
security: authorization: enabled
注意要点:
-
security顶格写,冒号后换行;authorization缩进 2 个空格,冒号后加空格再写enabled - 不要写成
authorization: "enabled"(字符串引号非必需,但加了也不报错) - 不要与
net、storage等同级配置混用错误缩进,YAML 对空白敏感 - 配置文件路径通常为
/etc/mongod.conf(Linux)或/usr/local/etc/mongod.conf(macOS)
配置后必须重启服务,且连接方式要同步更新
改完配置不重启等于白改。重启后,所有操作(包括 show dbs、use mydb)都会被拒绝,除非先认证。
连接时必须显式指定认证库(通常是 admin):
- 命令行连接:
mongo -u "admin" -p "mypass" --authenticationDatabase "admin" - 如果省略
--authenticationDatabase,默认去当前库找用户,而管理员用户只存在于admin库 - 使用 Compass 或 Robo 3T 时,要在「Authentication」页签里填对
Authentication Database字段,不能留空或填错 - 应用代码(如 Node.js 的
mongodb驱动)连接字符串需包含?authSource=admin,例如:mongodb://admin:mypass@localhost:27017/myapp?authSource=admin
容易被忽略的权限初始化顺序问题
启用 security.authorization: enabled 后,如果还没创建任何用户,你将彻底失去访问能力——连 use admin 都能执行,但 db.createUser(...) 会提示 not authorized on admin to execute command createUser。
这是因为:认证开启后,未认证的 shell 默认只有 connect 权限,没有建用户的权限。解决方法只有两个:
- 临时注释掉
security.authorization,重启 mongod,创建好管理员用户后再取消注释并重启 - 或启动时加
--noauth参数绕过认证(仅调试用,不可用于生产)
最稳妥的做法是:先停服务 → 改配置但先不启用 authorization → 启动 → 创建 admin 用户 → 关停 → 启用 authorization → 重启。顺序错一步,就得进恢复模式。











