MongoDB 用户管理详解:admin 用户 vs 数据库用户

在 MongoDB 中,用户建在哪个库决定了它的作用范围和管理方式,这一点和 MySQL 很不一样,也是新手最容易绕进去的地方。本文讲清楚两种用户的区别、各自的使用场景、 完整的管理操作,以及连接时那个必须写对的 authSource。 零、先确认认证是开着的 MongoDB 默认不开认证。 没开的时候,你建的用户一个都不生效——任何人连上来 都是完全权限,db.createUser() 只是往集合里写了几行数据而已。 编辑 /etc/mongod.conf: security: authorization: enabled 改完重启,之后所有操作都需要认证: sudo systemctl restart mongod 顺序很重要:先在没开认证的状态下建好第一个管理员账号,再打开认证重启。 反过来的话,认证开着但一个用户都没有,你就把自己关在门外了 (只能用 --noauth 重启一次救回来)。 一、两种类型的用户 1. admin 数据库创建的用户(全局用户) 这种用户是在 admin 数据库中创建的,可以访问多个数据库,并对多个数据库赋予不同权限。 use admin db.createUser({ user: "adminUser", pwd: "secure123", roles: [ { role: "readWrite", db: "sales" }, { role: "read", db: "analytics" } ] }) 特点 用户信息存储在 admin 库; 可以管理和访问多个数据库; 适合平台管理员、系统服务等集中权限场景。 使用场景 运维或 DevOps 脚本; 应用需要访问多个数据库; 多库统一管理权限。 2. 普通数据库创建的用户(局部用户) 这种用户只能在某一个数据库中创建,默认仅能访问该数据库。 use appdb db.createUser({ user: "appUser", pwd: "pass123", roles: [ { role: "readWrite", db: "appdb" } ] }) 特点 用户信息只存在于当前库; 默认只能访问当前数据库; 隔离性好,更安全。 使用场景 Web 应用访问自己的数据; 每个业务数据库独立授权; 多租户系统中的租户隔离。 二、常见用户管理操作 创建用户 db.createUser({ user: "user1", pwd: "123456", roles: [ { role: "readWrite", db: "mydb" } ] }) 修改用户密码 db.updateUser("user1", { pwd: "newpass" }) 要在用户所属数据库执行。 ...

July 23, 2025 · 2 min · 翼橙