MongoDB是否可以限制用户资源?具体配置方法是什么?
MongoDB 5.0 单用户资源使用限制方案
MongoDB 5.0完全支持对用户级别的资源使用做阈值限制,和MySQL的单用户资源限制能力对应,核心是通过createUser/updateUser命令的restrictions参数配置实现,适配你当前使用的5.0.2版本以及mongosh操作环境。
支持的限制类型
- 每小时查询次数限制:对应配置项
maxQueriesPerHour,限制单用户每小时可执行的查询类操作总数 - 每小时写入次数限制:对应配置项
maxWritesPerHour,限制单用户每小时可执行的写入类操作总数 - 每小时连接次数限制:对应配置项
maxConnectionsPerHour,限制单用户每小时可新建的连接总数 - 可选扩展限制:
maxConcurrentConnections,限制单用户可同时持有的活跃连接数
配置操作步骤(mongosh 环境)
首先切换到对应用户所属的数据库,全局用户切换到admin库,单库专属用户切换到对应业务库即可:use admin
1. 新建用户时配置资源限制
示例:创建名为app_user的用户,配置每小时最多查询1000次、每小时最多新建连接200次、最多同时持有50个活跃连接:
db.createUser({ user: "app_user", pwd: "your_secure_password", roles: [{role: "readWrite", db: "target_business_db"}], restrictions: { maxQueriesPerHour: 1000, maxConnectionsPerHour: 200, maxConcurrentConnections: 50 } })
2. 已有用户修改资源限制
示例:给app_user新增每小时最多500次写入的限制,注意restrictions是全量覆盖字段,修改时需要把原有保留的限制项一并填写,避免旧配置被清空:
db.updateUser("app_user", { restrictions: { maxQueriesPerHour: 1000, maxWritesPerHour: 500, maxConnectionsPerHour: 200, maxConcurrentConnections: 50 } })
3. 查看已有用户的资源限制配置
db.getUser("app_user")
返回结果中会明确展示restrictions字段下所有已配置的阈值参数。
注意事项
- 资源限制统计为单节点维度,如果是分片集群,每个分片会单独统计用户的资源使用量,不会跨节点汇总计算阈值
- 用户触发阈值后,后续请求会被直接拒绝,返回
OperationFailed错误码,提示资源配额不足,需等待下一个小时统计周期重置后恢复使用 - 5.0.2版本完全兼容上述所有配置项,无需额外开启特殊参数或安装插件
内容的提问来源于stack exchange,提问作者Unsel
相关产品推荐
相关产品推荐

