mongodb权限有哪些?

来源:AI社区作者:石川澪头衔:网络博主
导读:本期聚焦于小伙伴创作的《mongodb权限有哪些?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《mongodb权限有哪些?》有用,将其分享出去将是对创作者最好的鼓励。

MongoDB的权限体系基于角色进行管理,通过给用户分配不同的角色,来控制用户对数据库资源的操作权限,所有权限都围绕角色展开,内置角色已经覆盖了大部分常规使用场景,同时也支持用户自定义角色来满足特殊需求。

mongodb权限有哪些?

MongoDB内置角色分类

MongoDB的内置角色按照作用范围可以分为以下几类,不同类别的角色对应不同的操作权限:

数据库用户角色

这类角色仅作用于单个数据库,是最常用的基础权限角色,包含两种:

  • read:允许用户读取指定数据库的所有非系统集合数据,以及部分系统集合的只读权限,比如system.indexes集合。
  • readWrite:在read角色权限的基础上,增加了对集合的插入、更新、删除操作权限,也可以创建、删除普通集合和索引。

数据库管理角色

这类角色同样作用于单个数据库,拥有该数据库的管理权限:

  • dbAdmin:允许用户执行数据库的管理操作,比如创建、删除集合,查看数据库状态,执行索引管理、统计信息等操作,但是没有读写集合数据的权限。
  • dbOwner:是单个数据库的最高权限角色,包含了readWrite、dbAdmin、userAdmin三个角色的所有权限,可以对该数据库执行所有操作。
  • userAdmin:允许用户在当前数据库中创建、删除、修改用户,以及分配用户角色,但是不能操作集合数据。

集群管理角色

这类角色作用于整个MongoDB集群,只有admin数据库中存在:

  • clusterAdmin:集群的最高管理权限,包含了集群所有管理操作的权限,比如添加、删除分片,管理副本集,查看集群状态等。
  • clusterManager:允许用户执行集群的管理操作,比如管理分片和副本集,但是不能修改用户权限。
  • clusterMonitor:只读的集群监控权限,允许用户查看集群的状态和监控数据,不能执行修改操作。
  • hostManager:允许用户管理服务器相关的操作,比如关闭数据库实例,查看服务器状态等。

备份恢复角色

这类角色用于数据的备份和恢复操作,仅存在于admin数据库:

  • backup:允许用户执行备份操作,比如使用mongodump工具备份数据,需要读取所有数据库的数据权限。
  • restore:允许用户执行恢复操作,比如使用mongorestore工具恢复数据,拥有写入数据的权限。

全数据库角色

这类角色作用于所有数据库,仅存在于admin数据库:

  • readAnyDatabase:允许用户读取所有数据库的普通集合数据,和单个数据库的read角色权限类似,但是范围覆盖所有库。
  • readWriteAnyDatabase:允许用户读写所有数据库的普通集合数据,覆盖所有库的readWrite权限。
  • userAdminAnyDatabase:允许用户在所有数据库中管理用户,分配用户角色,覆盖所有库的userAdmin权限。
  • dbAdminAnyDatabase:允许用户管理所有数据库,覆盖所有库的dbAdmin权限。

超级用户角色

root角色是MongoDB中权限最高的角色,仅存在于admin数据库,拥有所有操作的权限,包括集群管理、所有数据库读写、用户管理等所有功能,生产环境不建议随意分配该角色。

自定义角色权限

如果内置角色无法满足业务需求,MongoDB支持用户自定义角色,自定义角色可以指定具体的操作权限和资源范围。下面是通过mongo shell创建自定义角色的示例:

// 切换到admin数据库,自定义角色需要在admin库创建
use admin

// 创建自定义角色,角色名为custom_read_write_role,作用于test数据库
db.createRole({
    role: "custom_read_write_role",
    // 角色权限列表,指定可以执行的操作
    privileges: [
        {
            // 资源范围,这里指定为test数据库的所有集合
            resource: { db: "test", collection: "" },
            // 允许的操作:查询、插入、更新、删除
            actions: [ "find", "insert", "update", "remove" ]
        }
    ],
    // 继承的内置角色,这里不继承其他角色
    roles: []
})

创建完成后,就可以给指定用户分配这个自定义角色,分配方式和内置角色一致。

权限分配示例

下面是通过mongo shell给用户分配权限的完整示例,假设我们要给test_db数据库创建一个只读用户:

// 切换到admin数据库,用户管理操作需要在admin库执行
use admin

// 创建用户,用户名是test_reader,密码是test123456
db.createUser({
    user: "test_reader",
    pwd: "test123456",
    // 给用户分配角色,这里分配test_db数据库的read角色
    roles: [
        { role: "read", db: "test_db" }
    ]
})

如果需要给用户分配多个角色,可以在roles数组中增加对应的角色配置即可。

权限使用注意事项

  • 生产环境尽量避免使用root超级角色,遵循最小权限原则,只给用户分配必要的权限。
  • 用户角色修改后,需要重新登录才能生效,已有的连接不会自动更新权限。
  • 自定义角色时,资源范围要尽可能缩小,避免权限过度开放。
  • 定期审计用户权限,及时删除不再使用的用户和多余的角色。

mongodb权限管理角色权限database_user修改时间:2026-07-08 09:24:32

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。