MongoDB 6.0 完全移除 --auth 参数,必须通过配置文件设置 security.authorization: enabled 并在 admin 库创建 root 角色用户,连接时显式指定 --authenticationDatabase=admin(或 URI 中 authSource=admin),否则认证不生效。

直接说结论:MongoDB 6.0 不再支持 --auth 命令行参数,强行使用会报错或被忽略;必须通过配置文件启用 security.authorization: enabled,再创建管理员用户,否则身份验证不会生效。
为什么 --auth 在 MongoDB 6.0 中失效
MongoDB 自 4.0 起逐步弃用 --auth,到 6.0 完全移除该启动参数。如果你在命令行中执行 mongod --auth --port 27017,服务仍能启动,但日志里会出现类似 WARNING: --auth is deprecated. Use security.authorization instead. 的提示,且实际不启用验证——任何客户端无需密码仍可连上并执行 db.dropDatabase()。
根本原因是:6.0 强制要求所有安全配置统一收口到 YAML 配置文件,避免命令行与配置文件冲突导致权限策略不可控。
-
--auth是旧版(3.x/4.0 之前)的临时开关,已从二进制中逻辑删除 - 即使你用
mongosh连上后执行db.auth(),也只对当前会话临时有效,不改变服务级访问控制 - 错误现象:重启 mongod 后,之前用
db.auth()登录过的 shell 依然能操作,但外部应用(如 Node.js 驱动)连接时仍提示Authentication failed
正确启用方式:配置文件 + createUser 缺一不可
启用验证不是“开个开关”就完事,而是两步硬性依赖:先改配置让服务进入“强制验权模式”,再建用户让系统有东西可验。漏掉任一环节都会导致连接失败或权限失控。
- 编辑
/etc/mongod.conf(Linux/macOS)或C:\Program Files\MongoDB\Server\6.0\bin\mongod.cfg(Windows),在security段下添加:
security: authorization: enabled
- 确保该配置项**顶格对齐**,YAML 对缩进敏感;若已有
security块,只补authorization: enabled,不要重复写security: - 保存后必须执行
sudo systemctl restart mongod(Linux)或重启 Windows 服务,热重载不生效 - 重启后立刻用
mongosh连接(不带 -u/-p):此时应无法执行show dbs,报错not authorized on admin to execute command { listDatabases: 1, ... }—— 这才是验证真正启用了
创建管理员用户的三个关键细节
很多人卡在“明明配了 authorization,却连不上”,问题常出在用户创建阶段。6.0 要求管理员必须在 admin 数据库中、用 userAdminAnyDatabase 或 root 角色创建,且密码强度受默认策略限制。
- 必须先切换到
admin数据库:use admin,否则createUser会把用户建在当前库(比如 test),后续--authenticationDatabase admin就找不到人 - 角色必须是内置高权限角色,例如:
{role: "root", db: "admin"}或{role: "userAdminAnyDatabase", db: "admin"};dbOwner等库级角色不够用 - 密码不能太简单:6.0 默认启用
passwordValidation,若密码不含大小写字母+数字+特殊字符,createUser会直接拒绝并报errmsg: "Password must contain at least one uppercase letter, one lowercase letter, one digit, and one special character" - 示例命令(在
mongosh中执行):
use admin
db.createUser({
user: "sa",
pwd: "Sa123!@#",
roles: [{role: "root", db: "admin"}]
})
连接时必须指定 --authenticationDatabase
这是最容易忽略的坑:6.0 要求显式声明认证凭据存储在哪一个数据库,哪怕用户就在 admin 库里。省略该参数会导致 Authentication failed,即使用户名密码完全正确。
- 正确连接命令:
mongosh -u "sa" -p "Sa123!@#" --authenticationDatabase "admin" - 如果用户建在其他库(如为
myapp库建的读写用户),则此处必须填myapp,不能填admin - Node.js 驱动同理:连接字符串里要带
?authSource=admin,例如:mongodb://sa:Sa123!@#localhost:27017/myapp?authSource=admin - Robo 3T / Studio 3T 等 GUI 工具,在 Connection Settings → Authentication 标签页中,“Authentication Database” 字段必须手动填
admin,不能留空或选错
真正麻烦的不是步骤多,而是每个环节都存在“看起来成功、其实没生效”的静默失败点:配置缩进错一位、use 切库漏掉、authSource 拼错成 authDB……这些都不会报语法错误,只会让你在应用连不上时反复怀疑网络或防火墙。


















