用户权限:

  1. mongodb是没有默认管理员账号,所以要先添加管理员账号,在开启权限认证。
  2. 切换到admin数据库,添加的账号才是管理员账号。
  3. 用户只能在用户所在数据库登录,包括管理员账号。
  4. mongo的用户是以数据库为单位来建立的,每个数据库有自己的管理员。
  5. 管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。 注:帐号是跟着库走的,所以在指定库里授权,必须也在指定库里验证

内置角色

  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) 复制代码

权限具体说明

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

增加用户

创建 admin

> use admin
> db.createUser({user: "admin",pwd: "123456",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]})

创建root

创建完admin管理员,创建一个超级管理员 root 角色:root root角色用于 关闭数据库 db.shutdownServer()

> use admin
> db.createUser({user: "root",pwd: "123456",roles: [ { role: "root", db: "admin" } ]})

创建用户自己的数据库的角色

当账号管理员和超级管理员,可以为自己的数据库创建用户了 (坑)这时候一定,一定要切换到所在数据库上去创建用户,不然创建的用户还是属于admin

> use position
> db.createUser({user: "position",pwd: "123456",roles: [ { role: "dbOwner", db: "position" } ]})

查看用户

查看全局所有账户

> use admin
switched to db admin
> db.auth('admin','123456') //验证用户,相当于登录
1
> db.system.users.find().pretty() 或者使用 > db.system.users.find()

查看当前库下的账户

> use admins
switched to db admin
> show users

删除用户

根据id删除用户

删除用户需要有以下权限

db.grantRolesToUser ( "admin", [ { role: "__system", db: "admin" } ] )
> db.system.users.remove({_id:"XXX.XXX"})

根据用户名删除用户

> db.system.users.remove({user:"XXXXXX"})

修改用户

撤销角色

# 从account数据库上删除用户reportsUser 的 readWrite 角色:use reporting
db.revokeRolesFromUser("reportsUser",[{ role: "readWrite", db: "accounts" }])

授予角色

# 授予reportsUser用户account数据库上的读取角色:use reporting
db.grantRolesToUser("reportsUser",[{ role: "read", db: "accounts" }])

更改密码

# 将reporting用户的密码更改为:SOh3TbYhxuLiW8ypJPxmt1oOfL
> db.changeUserPassword("reporting", "SOh3TbYhxuLiW8ypJPxmt1oOfL")