2. 用户管理

前言

当我们以上一篇的方式开启mongo server的时候,我们的数据库是裸奔着的。在生产环境,必须有安全认证机制。mongodb提供了好几种机制,我们来说一种基于用户和角色的权限认证机制。

创建Root用户

  • 首先,我们先正常方式开启服务器,默认是没有开启认证机制的:

    sudo mongod --port 27017 --dbpath /var/lib/mongodb &
    

    连接到server,并查看当前的数据库:

    mongo
    show dbs
    

    mongodb默认会有一个空的admin数据库,里面专门用来管理用户的。

  • 然后,我们进入admin数据库,创建一个root用户,它负责操作管理用户;给它分配的权限是能够操作当前admin的用户数据,也就是说可以增加删除和更新所有用户,但是并不能去操作其他数据库的数据:

    注意: mongodb的用户认证有一个限制,就是在哪个数据库创建的用户,就必须在哪个数据库登录认证,不管这个用户的角色有多大。

    use admin
    db.createUser(
    ...   {
    ...     user: "root",
    ...     pwd: "your psw",
    ...     roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
    ...   }
    ... )
    

    其中,用户的admin表示能够操作的数据库,role表示用户的角色,可选的取值为:

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

    此时,关掉mongo server,以开启认证的方式进行重启,并进入admin数据库:

    sudo mongod --auth --port 27017 --dbpath /var/lib/mongodb &
    mongo
    use admin
    
  • 登录认证,注意,只能在admin中进行登录认证,认证后才能进行其他操作:

    db.auth('root', 'your psw')
    //其他操作
    db.getUsers()  //查看用户admin
    db.createUser(...)
    db.updateUser(username, {
      role: "xxx", db: "xxx"
    })
    db.dropUser(username)
    db.dropAllUsers()
    

创建普通用户

  • 首先,需要进入test数据库,专门为test数据库创建一个普通用户:

    use test
    db.createUser(
     ...   {
     ...     user: "test",
     ...     pwd: "your psw",
     ...     roles: [ { role: "readWrite", db: "test" } ]
     ...   }
     ... )
    
  • 其次,进行普通用户的认证,我们就可以操作数据了:

    db.auth('test', 'your psw')
    //操作数据
    db.abc.insert({'a':'b'})
    db.abc.find()
    

总结

mongodb用户管理的一般做法是:

  1. 先在admin中创建一个root用户,专门负责管理所有数据库的用户的,但是它的操作范围只能是admin内
  2. 然后再给指定的数据库专门创建普通用户,角色是可读写,操作范围只能是这个数据库
  3. 用户总是专属于某个数据库。在哪个数据库创建用户,就只能在那个数据库进行登录认证;认证之后才能进行其他的数据操作

你可能感兴趣的:(2. 用户管理)