MongoDB无法创建用户及执行getUsers():admin库未授权执行命令
解决MongoDB执行getUsers()或创建用户时的未授权问题
我之前也碰到过完全一样的情况,这是因为你用新--dbpath启动的MongoDB实例默认没有启用身份验证,但同时admin数据库里还没有任何具备权限的用户,所以执行需要权限的命令时就会被拒绝。按照下面的步骤操作就能搞定:
步骤1:确保MongoDB实例未启用认证运行
如果你的MongoDB启动命令里加了--auth参数,先停止实例,然后重启时去掉这个参数,让实例在无认证模式下运行。这样你才能创建第一个管理员用户。
步骤2:创建超级管理员用户
打开MongoDB Shell,执行以下操作:
- 切换到
admin数据库:
use admin
- 创建拥有最高权限的root用户(记得把密码换成你自己的强密码):
db.createUser({ user: "admin_root", pwd: "YourStrongPassword123!", roles: [{ role: "root", db: "admin" }] })
执行成功后会返回类似{ "ok" : 1 }的结果。
步骤3:重启MongoDB并启用认证
现在停止MongoDB实例,重启时加上--auth参数来启用身份验证。比如命令行启动:
mongod --dbpath /your/custom/db/path --auth
如果你用配置文件启动,在配置文件里添加或修改以下配置:
security: authorization: enabled
然后重启MongoDB服务。
步骤4:用管理员用户认证并操作
现在可以用刚才创建的管理员用户登录MongoDB了,有两种方式:
- 启动Shell时直接认证:
mongo -u admin_root -p YourStrongPassword123! --authenticationDatabase admin
- 进入Shell后再认证:
use admin db.auth("admin_root", "YourStrongPassword123!")
认证成功后(返回1),再执行db.getUsers()就能正常获取用户列表,创建其他用户也不会再出现权限问题了。
额外提示
- 不要用过于简单的密码,遵循MongoDB的密码安全要求;
- 如果不需要超级权限,也可以给用户分配更精细的角色(比如
dbOwner用于管理单个数据库),但初始管理员用root角色最方便; - 确保
--dbpath指定的目录权限正确,MongoDB进程要有读写权限。
内容的提问来源于stack exchange,提问作者Nilotpal
相关产品推荐
相关产品推荐

