You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB中在admin数据库与test数据库创建同权限用户的差异探究

MongoDB: 不同数据库创建的同角色用户权限差异

先来看你给出的两类用户创建操作,我把它们整理成更清晰的代码块:

操作示例

1. 在admin库创建用户user1

use admin
db.createUser({
  user: "user1",
  pwd: "1234",
  roles: [{ role: "readWrite", db: "test" }]
})

执行后返回:

Successfully added user: { "user" : "user1", "roles" : [ { "role" : "readWrite", "db" : "test" } ] }

这个操作是在admin数据库下创建用户user1,并赋予它test库的readWrite角色。

2. 在test库创建用户user2

use test
db.createUser({
  user: "user2",
  pwd: "1234",
  roles: [{ role: "readWrite", db: "test" }]
})

执行后返回:

Successfully added user: { "user" : "user2", "roles" : [ { "role" : "readWrite", "db" : "test" } ] }

这个操作是直接在test数据库下创建用户user2,同样赋予test库的readWrite角色。

核心问题解答:权限是否相同?

结论:这两个用户的实际操作权限完全一致——它们都只能对test数据库执行读写操作,不存在user1权限更大的情况。

这里需要理清MongoDB用户系统的两个关键概念:

  • 用户存储库:用户的元数据(比如用户名、密码哈希)会存在创建时所在的数据库(user1存在admin,user2存在test),但这和权限范围无关。
  • 角色生效范围:角色的权限是由roles数组里的db字段决定的,不管用户存在哪个库,只要角色指定的是test库的readWrite,就只能操作test库。

唯一的区别体现在登录验证环节:

  • 登录user1时,必须指定验证数据库为admin(比如用Mongo Shell连接时要加--authenticationDatabase admin参数);
  • 登录user2时,验证数据库要指定为test(如果直接连接test库登录,默认会用当前库作为验证库,所以可以省略这个参数)。

只有当你给admin库的用户分配了admin库专属的超级角色(比如root、userAdminAnyDatabase)时,它才会拥有跨库的更高权限。但在你的例子里,两个用户的角色完全针对test库,所以权限没有区别。

内容的提问来源于stack exchange,提问作者mark86v1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 16:58:17