MongoDB创建用户报错:找不到已存在的角色XXX该如何解决?
解决MongoDB角色存在但创建用户时找不到的问题
核心原因
你创建的角色和创建用户时所在的数据库不匹配——MongoDB的角色是数据库级别的(集群级角色除外),比如在admin库创建的角色,只能在admin库创建用户时引用,在其他库执行创建用户命令会提示找不到该角色。
具体解决步骤
确认角色所在数据库
先切换到你当初创建角色时的数据库,比如当时在admin库操作的,就执行:use admin然后查看该库下的所有角色,找到
XXX角色并确认它所属的数据库:db.getRoles()在对应数据库创建用户
切换到角色所在的数据库,再执行创建用户命令,注意明确指定角色所属的库:use admin // 替换为角色实际所在的数据库 db.createUser({ user: "你的用户名", pwd: "你的密码", roles: [ { role: "XXX", db: "admin" } ] // 这里的db要和角色所在库一致 })误建角色到错误库的修复方式
如果角色建错了数据库,先删除错误库中的角色:use 错误数据库名 db.dropRole("XXX")再切换到目标数据库重新创建角色:
use 目标数据库名 db.createRole({ role: "XXX", privileges: [ /* 你的权限配置 */ ], roles: [ /* 需要继承的角色 */ ] })最后在同一个目标库创建用户并引用该角色。
额外提示
- 创建角色和用户时,务必注意
use 库名切换后的当前数据库,MongoDB默认会将角色存储在当前库,用户也默认创建在当前库。 - 可以用
db.getUser("用户名")查看用户信息,确认角色关联是否正确。
内容的提问来源于stack exchange,提问作者Krypex
相关产品推荐
相关产品推荐

