0 借鉴两张图表示
1. 用户权限列表(常用几个)
命令 | 含义 |
---|---|
read | 允许用户读取指定数据库 |
readWrite | 允许用户读写指定数据库 |
dbAdmin | 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile |
userAdmin | 允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户 |
clusterAdmin | 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限 |
readAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读权限 |
readWriteAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读写权限 |
userAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 |
dbAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限 |
root | 只在admin数据库中可用。超级账号,超级权限 |
上面的权限,对于新人来说,建议,自己玩一遍,会更理解。上面这些权限都是基于开启了权限的前提下生效
即 auth=true时生效
通俗一点的解释一下上面的:
- read 读权限,比如你现在在A库当中,你想读取A库的数据,你需要A库的读权限
- readWrite 读写权限,比如你现在在A库当中,你想读写A库的数据,你需要A库的读写权限
- dbAdmin 数据库的DDL权限,比如你想在A库当中创建集合,索引,你就需要A库的这个权限
- userAdmin 用户管理,比如你现在有A库的这个权限,你就可以给你同事创建操作A库的用户给他使用且赋予操作A库的读写或者dbAmin权限都行
- 后面这几个权限都是横跨所有数据库的权限,root更是最高权限,只在admin数据库中可用,意思是比如你创建用户的时候,你需要指定db是哪个,这几个权限必须填写admin,填写其他的会报错;意思就是这个
2. 新增用户
不管是新增管理员用户,还是新增普通用户,都一样,只不过权限不一样而已
- mongodb初始化的时候,也就是你第一次使用
mongo
客户端命令登录进去的时候,默认是没有开启权限用户认证,除非你自己特意配置了 auth=true,这个时候我们需要创建一个管理员用户;
语法: db.createUser({user:"用户名",pwd:"用户名密码",roles:[{role:"用户角色权限",db:"作用于哪个数据库"}]})
eg: db.createUser({user:“wql”,pwd:“wql”,roles:[{role:“readWrite”,db:“ccc”}]})
上面的案列意思是,创建一个用户名为wql,密码为wql的用户,他的权限读写,对应的数据库是ccc’
注意:
- 创建普通用户时,指定的数据库得先存在
- 在admin库下创建用户时,比如你想给ccc库创建用户,那么你先使用
use ccc
命令切换过去再创建 - 如果你想看下当前数据库存在哪些角色,可以使用
show users
命令查看,前提是当前认证角色必须有当前库的userAdmin权限 - 如果你在admin库下,你想看下当前mongodb存在多少用户,你有userAdminAnyDatabase权限的话,可以使用
db.system.users.find()
命令查询 - 创建完一个新的用户,你需要退出重登才能看到
- 开启了权限认证,需要在操作库之前使用
db.auth(”账户“,”密码“)
验证,成功返回1
3. 更新用户
语法: db.updateUser("用户名",{roles:[{旧的角色信息},{新的角色信息}]})
或者: db.updateUser("用户名",{roles:[{新的角色信息}]})
其实就是覆盖之前的
更新之前先使用 有权限的用户使用show users
查看当前需要修改的用户的权限
db.updateUser(“wql01”,{roles:[{role:“readWrite”,db:“abc”},{role:“read”,db:“abc”}]})
上面举例的意思是,修改wql01用户权限,之前是abc库的读写,现在改成abc的读权限
3.1 更新用户密码
- 使用db.updateUser()函数更新密码
语法:db.updateUser("用户名",{”pwd“:"新密码"})
- 使用db.changeUserPassword()函数更新密码
语法:db.changeUserPassword('旧密码',‘新密码’)
4. 删除用户
通过db.dropUser()
函数可以删除指定用户,删除成功之后会返回true。在删除用户时需要切换到创建用户时所指定的数据库才可以删除。注意:需要使用具有 userAdminAnyDatabase角色管理员用户才可以删除其他用户。