MongoDB默认无认证致删库风险,需创建管理员用户、启用authorization并限制bindIp,客户端连接必须指定authSource=admin。

为什么连上就能删库?——默认无认证的真实风险
MongoDB安装完不配任何参数,mongod 就直接跑起来,监听 0.0.0.0:27017,谁都能连,谁都能 db.dropDatabase()。这不是“方便”,是裸奔。2022年那波勒索攻击里,大量被加密的库,源头就是没开认证 + 绑定公网IP。
三步关掉默认后门:从创建用户到重启生效
不能只改配置,也不能只建用户——必须闭环。漏一步,mongo --host xxx 依然能直连进空数据库。
- 先在
admin库建超级管理员:use admin db.createUser({ user: "secAdmin", pwd: "A1#xK9$mLq@vT2", roles: [{ role: "root", db: "admin" }] }) - 再改配置文件
/etc/mongod.conf,加这两段:security: authorization: enabled net: bindIp: 127.0.0.1,192.168.5.100 # 别留 0.0.0.0
- 重启服务并验证:
sudo systemctl restart mongod sudo systemctl status mongod # 看是否 active (running) mongo --username secAdmin --password --authenticationDatabase admin -eval "db.runCommand({listDatabases:1})"如果报not authorized,说明认证已生效;如果还能直接mongo进去,大概率是配置没 reload 或 bindIp 写错了。
连接时总提示 authSource 错误?——客户端最常踩的坑
错误现象:Authentication failed. 或 Unable to authenticate using sasl protocol mechanism SCRAM-SHA-256。90% 是因为没指定 authSource,或者指定错了库。
-
authSource不是你要操作的库,而是“这个用户名存在哪个库里”——所有管理员都在admin,所以必须写?authSource=admin - URI 格式必须完整:
mongodb://secAdmin:pass@192.168.5.100:27017/myapp?authSource=admin - 命令行用
mongo工具时,--authenticationDatabase admin缺一不可,不能简写成--authenticationDatabase myapp - Node.js 驱动(如
mongodb@6.x)里,auth选项要嵌套写:new MongoClient(uri, { auth: { username: "secAdmin", password: "..." }, authSource: "admin" })
加固不是只做一次的事
开了认证只是起点。bindIp 写错一个字符、忘了更新防火墙规则、用弱密码建业务账号(比如 appUser 密码设成 123456),前面全白搭。尤其注意:云数据库(如腾讯云 MongoDB)的 authSource 强制为 admin,但控制台生成的初始用户叫 mongouser,密码必须手动重置——它不会因为你开了 authorization 就自动变强。










