MongoDB项目中如何仅共享指定Collection并禁止访问其他集合
集合级权限隔离配置方法
MongoDB原生支持集合粒度的权限控制,遵循默认无权限即拒绝访问的规则,你只需要给目标用户单独授予Collection1的访问权限、不授予另外两个集合的任何权限,就能完全实现访问隔离,具体操作分两种常见场景:
自建MongoDB/本地部署实例操作
- 登录MongoDB的admin库,执行用户创建命令,仅给目标集合授权:
use admin db.createUser({ user: "共享账号的用户名", pwd: "对应账号密码", roles: [ { // 需要只读权限填read,需要读写权限填readWrite role: "read", db: "Project0对应的实际数据库名", collection: "Collection1" } ] })
- 权限验证:用新建的账号登录实例,尝试查询Collection2、Collection3时会直接返回无权限报错,仅对Collection1的操作可以正常执行。
MongoDB Atlas云服务操作
- 进入对应项目的集群控制台,打开左侧「Database Access」菜单,点击新增数据库用户
- 填写账号密码后,在权限配置栏不要选择全库/全集群权限,选择「指定集合(Specific collection)」选项
- 下拉选中Project0对应的数据库,再选中Collection1,按需分配只读/读写权限
- 不要为该用户添加Collection2、Collection3的任何授权规则,也不要分配项目级别的管理员、全局浏览者等角色,直接保存用户即可生效
注意:如果之前给这个用户分配过整库读写、全局访问类的角色,一定要先删掉这类高权限角色,否则会绕过集合级的权限限制,导致另外两个集合可被访问。
内容的提问来源于stack exchange,提问作者Nathanael Benichou
相关产品推荐
相关产品推荐

