• Mongodb出现Error: couldn‘t add user: Could not find role: root@database 解决方法


    1. 问题所示

    在增加mongodb的账号密码时候,实现有误,提示无法增加role这个权限,但明明已经是root的最高权限

    > use admin
    switched to db admin
    > db.createUser({
    ...   user: 'manong',    
    ...   pwd: '123456',  
    ...   roles:[{
    ...     role: 'root',   
    ...     db: 'database'     
    ...   }],
    ...   mechanisms : ["SCRAM-SHA-1"] 
    ... })
    2022-08-06T00:29:57.805+0800 E QUERY    [thread1] Error: couldn't add user: Could not find role: root@database :
    _getErrorWithCode@src/mongo/shell/utils.js:25:13
    DB.prototype.createUser@src/mongo/shell/db.js:1437:15
    @(shell):1:1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    截图如下:

    在这里插入图片描述

    2. 原理分析

    提示使用错误的mongo角色,则需要明白MongoDB的数据库角色来匹配规则(不同内置角色分配不同权限,类似云服务器中的入站规则角色)。MongoDB 在每个数据库上提供 内置的数据库用户和数据库管理角色

    总的来说,错误如下:除了admin,其他的roles不能用 root,根据需要选择所想要的role

    大致的内置角色如下

    数据库用户角色

    • read:提供用户读取指定数据库(提供读取所有非系统集合和system.js集合上的数据)
    • readWrite:提供用户读写指定数据库(提供read角色的所有权限以及修改所有非系统集合和system.js集合上的数据)

    数据库管理角色

    • dbAdmin:执行管理任务
    • dbOwner:数据库所有者可以对数据库执行任何管理操作
    • userAdmin:在当前数据库上创建和修改角色和用户的能力

    集群管理角色:(管理整个系统,而不仅仅是单个数据库。这些角色包括但不限于副本集和分片集群管理功能)

    • clusterAdmin:admin数据库可用,最大的集群管理访问
    • clusterManager:对集群的管理和监控操作
    • clusterMonitor:对监视工具的只读访问权限
    • hostManager:监控和管理服务器

    备份和恢复角色,admin数据库包括以下用于备份和恢复数据的角色:

    • backup:备份数据所需的最低权限
    • restore:视情况提供从备份还原数据所需的权限

    所有数据库角色:(以下角色在admin数据库上可用,并提供适用于除local和 之外的所有数据库的权限config):

    • readAnyDatabase:admin数据库可用,(提供与除和read之外的所有数据库相同的只读权限)
    • readWriteAnyDatabase:admin数据库可用,(提供与除和readWrite之外的所有数据库读写的权限)
    • userAdminAnyDatabase:admin数据库可用,(提供与除和 userAdmin之外的所有数据库相同的用户管理操作访问权限
    • dbAdminAnyDatabase:admin数据库可用,(提供与除和dbAdmin之外的所有数据库相同的权限

    超级用户角色:root (admin数据库可用)
    内部角色:__system

    关于每个角色使用权限
    可以查看官网对此解析:MongoDB内置角色

    3. 解决方法

    看到上面的内置角色之后
    填充其想要的角色即可
    将其 role: 'root',置换为 role: 'readWrite',也可

    db.createUser({
      user: 'manong',    
      pwd: '123456',  
      roles:[{
        role: 'readWrite',   
        db: 'database'     
      }],
      mechanisms : ["SCRAM-SHA-1"] 
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    截图如下:
    在这里插入图片描述

  • 相关阅读:
    Word Game
    04-跨域请求
    centos安装mysql5.7
    Java面试之爱立信
    java加sqlite3右键菜单版圣经,还没检查错误
    使用CPR库和Python编写程序
    灰色预测GM(1,1)
    Redis布隆过滤器和布谷鸟过滤器
    ida81输入密码验证算法分析以及破解思路
    动态代理类的特征
  • 原文地址:https://blog.csdn.net/weixin_47872288/article/details/126187962