mongodb 用户权限管理配置
mongodb 权限字段详情
- user 字段,为新用户的名字;
- pwd 字段,用户的密码;
- cusomData 字段,为任意内容,例如可以为用户全名介绍;
- 超级用户的 role 有两种,userAdmin 或者 userAdminAnyDatabase (比前一种多加了对所有数据库的访问,仅仅是访问而已)。
- db 是指定数据库的名字,admin 是管理数据库。
- 不能用 admin 数据库中的用户登录其他数据库。注:只能查看当前数据库中的用户,哪怕当前数据库 admin 数据库,也只能查看 admin 数据库中创建的用户。
- roles 字段,指定用户的角色,可以用一个空数组给新用户设定空角色。在 roles 字段,可以指定内置角色和用户定义的角色。
role可选值:
- 数据库用户角色:read、readWrite;
- 数据库管理角色:dbAdmin、dbOwner、userAdmin;
- 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
- 备份恢复角色:backup、restore;
- 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户角色:root
- 内部角色:__system,间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
role具体角色 | 权限说明 |
---|---|
Read | 允许用户读取指定数据库 |
readWrite | 允许用户读写指定数据库 |
dbAdmin | 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile |
userAdmin | 允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户 |
clusterAdmin | 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。 |
readAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读权限 |
readWriteAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读写权限 |
userAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 |
dbAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。 |
root | 只在admin数据库中可用。超级账号,超级权限 |
创建 admin 超级管理员用户
指定用户的角色和数据库:
此时添加的用户都只用于 admin 数据库,而非你存储业务数据的数据库
(在cmd中敲多行代码时,直接敲回车换行,最后以分号首尾)
db.createUser(
{ user: "admin",
customData:{description:"superuser"},
pwd: "admin",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
创建一个不受访问限制的超级用户
root 角色:不仅可以授权、也可对集合进行任何操作,但不建议直接使用
db.createUser(
{
user:"root",
pwd:"pwd",
roles:["root"]
}
)
创建一个业务数据库管理员用户
> db.createUser({
user:"user001",
pwd:"123456",
customData:{
name:'jim',
email:'jim@qq.com',
age:18,
},
roles:[
{role:"readWrite",db:"db001"},
{role:"readWrite",db:"db002"},
'read'// 对其他数据库有只读权限,对db001、db002是读写权限
]
})
查看创建的用户
show users
db.system.users.find()
db.runCommand({usersInfo:"userName"})
修改密码
use admin
db.changeUserPassword("username", "xxx")
修改密码和用户信息
db.runCommand(
{
updateUser:"username",
pwd:"xxx",
customData:{title:"xxx"}
}
)
删除数据库用户
use admin
db.dropUser('user001')
创建其他数据管理员
// 登录管理员用户
use admin
db.auth('admin','admin')
// 切换至db001数据库
use db001
// ... 増查改删该数据库专有用户