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

