必须启用访问控制,否则mongodb实例处于“零防护”状态:任何网络可达者均可无密码执行读写删等高危操作;需先无认证启动、在admin库创建root用户、配置authorization: enabled并指定正确authenticationdatabase后重启生效。

这个警告不是错误,但必须处理——它意味着你的 MongoDB 实例完全裸奔:任何能连上 27017 端口的人,都可以读、写、删任意数据库,包括 admin 和 config。
为什么启动 mongosh 就弹出 Access control is not enabled for the database
这是 MongoDB 4.0+ 的默认安全提示,只要没启用认证机制就会出现。它不阻碍你操作,但说明当前实例处于「零防护」状态:
- 本地或远程只要网络可达,无需密码就能执行
db.dropDatabase()、db.users.insert(...)等高危操作 - 云环境或生产服务器上,这等于把数据库大门敞开挂在公网
- 即使你只监听
127.0.0.1,也建议启用访问控制——防止本地其他账户或恶意进程越权访问
必须先创建 admin 用户,再开启 authorization
顺序错了就进不去数据库。MongoDB 要求:启用认证后,所有操作(包括创建用户)都必须通过已认证的账号执行。而初始状态下没有用户,所以得「先无认证登录 → 创建管理员 → 关闭服务 → 开启认证 → 重新登录」:
将 WCAG 2 AA 无障碍标准应用于设计系统、UI 组件和网页——通过可运行的验证器进行对比度计算,采用设计 token 模式使颜色天生可访问,设定排版和焦点状态规则,并提供语义检查清单。适用于构建或审查 UI。
- 用
mongod --dbpath /your/data/path启动无认证服务(不要加--auth) - 运行
mongosh连接,默认进入test库;先执行use admin - 创建 root 级管理员:
db.createUser({ user: "root", pwd: "strong-password-123", roles: [{ role: "root", db: "admin" }] }) - 退出
mongosh,用db.adminCommand({shutdown: 1})或直接 kill 进程关闭服务
配置文件里写 authorization: enabled 而不是 --auth 命令行参数
虽然 mongod --auth 能临时生效,但生产环境务必改配置文件,避免遗漏或误启:
- 找到
mongod.cfg(Windows 通常在安装目录bin\mongod.cfg,Linux 在/etc/mongod.conf) - 在
security:下添加缩进正确的authorization: enabled(注意是两个空格缩进,不是 tab) - 确保
net.bindIp不是0.0.0.0,至少设为127.0.0.1或内网 IP - 重启服务:
mongod -f /path/to/mongod.cfg,确认日志里有authorization: enabled
连接时必须指定 authenticationDatabase
很多人配完认证还连不上,卡在 Authentication failed,问题几乎都出在这里:
- 用户是在哪个库创建的,那个库就是它的
authenticationDatabase - 你用
use admin+db.createUser(...)创建的用户,认证库就是admin - 命令行连接必须显式指定:
mongosh -u root -p strong-password-123 --authenticationDatabase admin - Node.js 用
mongoose时,URL 必须带authSource=admin:mongodb://localhost:27017/test?authSource=admin
最容易被忽略的一点:创建用户后没重启服务,或者重启时没加载新配置文件——检查 mongod 进程启动参数或日志,确认是否真读到了 authorization: enabled。否则警告照旧,风险仍在。










