1.用户
用户+所属库: 在哪个库下创建的用户就属于哪个库的
2.角色
每个角色包括一组权限
3.权限
1)内置角色
- 数据库用户角色:read、readWrite
- 数据库管理角色:dbAdmin、dbOwner、userAdmin
- 集群管理角色:clusterAdmin、clusterManager、hostManager
- 备份恢复角色:backup、restore
- 所有数据库用户角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户角色:root
- 内部角色:_system
2)权限描述
权限类型 | 描述 |
---|---|
read | 允许用户读取指定数据库 |
readWrite | 允许读写指定数据库的权限 |
dbAdmin | 数据库管理权限,允许用户在指定数据库中执行管理函数,如索引创建,删除,查看统计等 |
userAdmin | 数据库用户的管理权限,包括创建用户,授权的管理 |
clusterAdmin | 只在admin数据库中可用,拥有所有分片或副本集相关函数的管理权限 |
readAnyDatabase | 只在admin数据库中可用,允许用户读取所有数据库权限 |
readWriteAnyDatabase | 只在admin数据库中可用,允许用户读写所有数据库的权限 |
userAdminAnyDatabase | 只在admin数据库中可用,拥有所有数据库的userAdmin权限 |
dbAdminAnyDatabase | 只在admin数据库中可用,拥有所有数据库的dbAdmin权限 |
root | 超级用户角色,只在admin数据库中可用 |
dbOwner | 某数据库的所有者,拥有该库的所有权限,包括的readWriter,dbAdmin和userAdmin权限 |
3)创建用户
db.createUser({
user:"",
pwd:"",
customData:{},
roles:[{role:"",db:""}|"",…]
})
- user:新建用户名
- pwd:新建用户密码
- customData:存放一些用户相关的自定义数据,该属性可忽略
- roles:配置用户的权限,数组类型
4)更新用户权限
db.updateUser(“用户名”,“roles”:[{“role”:“角色名称”},{“更新像2”:“更新内容”}])
5)修改密码
a)使用db.updateUser()函数更新密码
b)使用db.changeUserPassword()函数更新密码
// 创建用户并授权
use admin // use命令切换数据库时,如果该数据库不存在,则会自动创建该数据库
db.createUser({user:"user_name",pwd:"password",roles:[{"role":role_priviliges,"db":"db_name"}]})
// 创建管理员用户,管理员通常没有数据库的读写权限,只有操作用户的权限,管且员需要在admin数据库下创建
db.createUser({user:"admin",pwd:"123456",roles:[{role:'userAdminAnyDatabase',db:"admin"}]})
Successfully added user: {
"user" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
// 创建普通读写用户账号
db.createUser({user:"zhangsan",pwd:"123456",roles:[{role:'readWrite',db:"test"}]})
// 更新角色
db.updateUser("zhangsan",{roles:[{"role":"read","db":'test'}]})
// changeUserPassword修改密码
use db_name
db.changeUserPassword('user_name','password')
// updateUser修改密码
db.updateUser("用户名",{"pwd":"新密码"})
// 添加角色
use db_name
db.grantRolesToUser("user_name",[{role:"role_priviliges",db:"admin"}])
// 回收权限
use db_name
db.revokeRolesFromUser("user_name",[{role:"role_priviliges",db:"admin"}])
// 删除用户
db.dropUser("user_name")
// 查看admin库中的所有用户信息,开启auth认证
db.system.users.find()
// 用户认证
db.auth('admin','123456');
4.连接
数据库会为每一个MongoDB数据库连接创建一个队列,存放这个连接的请求。每个连接都有独立的队列。
(当开发者用一个线程插入数据,用另一个线程检查是否成功插入时,就会经常遇到这种问题)