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
相关产品推荐
相关产品推荐

