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

MongoDB 7.x用户权限配置:指定前缀数据库的创建与所有权

在MongoDB 7.x中配置特定前缀数据库权限

实现思路

MongoDB不支持直接通过通配符(如ABC*)授予数据库级角色,需通过自定义角色+通配符资源匹配实现需求:

  • 自定义角色包含创建数据库的权限,同时允许对所有ABC开头的数据库拥有dbOwner的全部操作权限
  • 将该自定义角色授予目标用户,实现仅能管理前缀匹配的数据库,无法访问其他数据库

具体操作步骤

1. 切换至admin数据库

使用root账号登录MongoDB后,切换到权限管理的核心库:

use admin;

2. 创建自定义角色

创建名为abcDbManager的自定义角色,配置所需权限:

db.createRole({
  role: "abcDbManager",
  privileges: [
    // 授予创建数据库的权限
    { resource: { db: "", collection: "" }, actions: ["createDatabase"] },
    // 授予所有ABC前缀数据库的完整管理权限(对应dbOwner角色的全部操作)
    { 
      resource: { db: "ABC*", collection: "" }, 
      actions: ["find", "insert", "update", "remove", "createCollection", "createIndex", "dropCollection", "dropDatabase", "grantRole", "revokeRole", "viewRole", "viewUser"] 
    }
  ],
  roles: []
});

注:MongoDB 7.x中角色引用不支持通配符资源,因此需要直接枚举dbOwner包含的所有权限动作,可根据实际需求删减不必要的动作以进一步收紧权限。

3. 创建目标用户并授予角色

创建用户UserABC并绑定自定义角色:

db.createUser({
  user: "UserABC",
  pwd: "YourStrongPassword123", // 替换为符合复杂度要求的实际密码
  roles: [
    { role: "abcDbManager", db: "admin" }
  ]
});

4. 验证权限有效性

  • 用UserABC登录后,创建ABC_test数据库并操作集合,应成功执行:
    use ABC_test;
    db.createCollection("demo_col");
    db.demo_col.insert({name: "test"});
    
  • 尝试访问非ABC前缀的数据库(如DEF_test),应返回权限错误:
    use DEF_test;
    db.demo_col.find();
    

注意事项

  • 密码需满足MongoDB的密码复杂度规则,避免弱密码
  • 可根据业务需求调整自定义角色的权限动作,移除不必要的操作
  • 若需支持其他前缀,只需修改自定义角色中的资源通配符(如XYZ*)并更新用户角色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 09:55:09