一、创建一个只读账号,具有所有库的查询权限
1、第一步:use admin
第二步 执行脚本:
db.createUser( {user: "all_read02",pwd: "allread123",roles: [
{role: "readAnyDatabase",db:"admin"},
],
mechanisms : ["SCRAM-SHA-1"]
}
)
2、查看用户 db.system.users.find()
3、删除账号 db.dropUser('gao')
4、修改密码 db.changeUserPassword("要修改密码的用户名","新密码")
5、修改用户角色(有问题)
db.updateUser( "test1",
{
roles:[
{role:"read",db:"admin"}
] ,
pwd:"test1password"
}
)
二、所有数据库角色:
readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
总结:
MongoDB是没有默认管理员账号,所以要先添加管理员账号,再开启权限认证。
切换到admin数据库,添加的账号才是管理员账号。
用户只能在用户所在数据库登录,包括管理员账号。
管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。
三. 权限说明(基于角色的权限控制)
内置角色
数据库用户角色
read: 只读数据权限
readWrite:学些数据权限
数据库管理角色
dbAdmin: 在当前db中执行管理操作的权限
dbOwner: 在当前db中执行任意操作
userADmin: 在当前db中管理user的权限
备份和还原角色
backup
restore
夸库角色
readAnyDatabase: 在所有数据库上都有读取数据的权限
readWriteAnyDatabase: 在所有数据库上都有读写数据的权限
userAdminAnyDatabase: 在所有数据库上都有管理user的权限
dbAdminAnyDatabase: 管理所有数据库的权限
集群管理
clusterAdmin: 管理机器的最高权限
clusterManager: 管理和监控集群的权限
clusterMonitor: 监控集群的权限
hostManager: 管理Server
超级权限
root: 超级用户