MongoDB用户操作
用户权限:
- mongodb是没有默认管理员账号,所以要先添加管理员账号,在开启权限认证。
- 切换到admin数据库,添加的账号才是管理员账号。
- 用户只能在用户所在数据库登录,包括管理员账号。
- mongo的用户是以数据库为单位来建立的,每个数据库有自己的管理员。
- 管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。 注:帐号是跟着库走的,所以在指定库里授权,必须也在指定库里验证
内置角色
- 数据库用户角色:read、readWrite;
- 数据库管理角色:dbAdmin、dbOwner、userAdmin;
- 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
- 备份恢复角色:backup、restore;
- 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户角色: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")