1. 简介

mongodb开启授权登陆前,需要在数据库中创建一个拥有账号管理的授权权限的账号,也就是可以创建各类账号的账号。步骤如下

1.1. 无验证启动mongodb

1.2. 创建用户

从3.0开始默认不创建admin库,需要自己创建

1. use admin
2. db.createUser(
    { user:"admin",     //user:新用户的名字
    customData:{description:"superuser"},     //可以为任意内容(可选)
    pwd:"admin",      //用户密码
    roles:[{role:"userAdminAnyDatabase",db:"admin"}]  //指定用户的角色(可以传入空数组)  userAdminAnyDatabase赋予用户所有数据库的用户管理(增、删)权限
        }
    )
3.验证用户是否创建成功 
    show users
4.以需授权的方式重新启动mongodb
    在mongod后添加 --auth 即可
5.进入admin 登陆账号          原则:账号哪里创建,哪里验证
    1. use admin
    2. db.auth("admin","admin")

2. 创建超级权限账号

1. 无验证启动mongodb
2. 创建超级权限账号
    1. use admin    //只能在admin库创建
    2. db.createUser(
        { user:"root",    
        pwd:"root",      
        roles:[{role:"root",db:"admin"}]
        }
    )
3. 登陆超级权限账号
    1. use admin
    2. db.auth("root","root")
4. 该账号拥有一切权限。

3.创建特定权限的账号

(对test1库拥有读写权限、对test2库拥有读权限)

1. 无验证启动mongodb (或者已授权的方式启动mongodb,登陆拥有用户管理权限的账号)
2. use test    //在那个库创建账号没有要求。原则是哪里创建,哪里登陆
3. db.createUser(
        { user:"test",    
        pwd:"test",      
        roles:[{role:"readWrite",db:"test1"},{role:"read",db:"test2"}]
        }
    )
4. db.auth("test","test")

4. 附录

4.1. Built-In Roles(内置角色)

  1. 数据库用户角色:read、readWrite;
  2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
  3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
  4. 备份恢复角色:backup、restore;
  5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  6. 超级用户角色:root
    // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
  7. 内部角色:__system

4.2. 角色作用

  1. Read:允许用户读取指定数据库
  2. readWrite:允许用户读写指定数据库
  3. dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
  4. userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
  5. clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
  6. readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
  7. readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
  8. userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
  9. dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
  10. root:只在admin数据库中可用。超级账号,超级权限

4.3. 相关方法

4.3.1. 查看该库下所有账号

show users

4.3.2. 查看服务器所有的账号

1. use admin 
2. db.auth("**","**")   //登陆有相关权限的账号
3. db.system.users.find().pretty();

4.3.3. 创建用户

db.createUser(
        { user:"test",    
        pwd:"test",      
        roles:[{role:"readWrite",db:"test1"},{role:"read",db:"test2"}]
        }
    )

4.3.4. 用户登陆

db.auth("test","test")