RBAC(Role-Based Access Control),即基于角色的访问控制,基本原理是权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限,它极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理很方便。
一、概念
MongoDB使用基于角色的访问控制(RBAC)来管理对MongoDB系统的访问,提供内置角色,也支持用户自定义的角色。通过授予用户一个或多个角色,这些角色确定用户对数据库资源和操作的访问权限,除角色分配外,用户无权访问系统。默认情况下不启用访问控制,可以使用–auth或security.authorization设置启用授权,启用内部身份验证也会启用客户端授权。
- 角色相关命令
- 创建角色
db.createRole({arguments})
- 查看角色
show roles
- __queryableBackup
- __system
- backup
- clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
- clusterManager
- clusterMonitor
- dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建删除、查看统计、访问
system.profile
等。 - dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
- dbOwner
- enableSharding
- hostManager
- read:允许用户读取指定数据库
- readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限。
- readWrite:允许用户读写指定数据库。
- readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限。
- restore
- root:只在admin数据库中可用,超级账号权限。
- userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户等。
- userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限。
- 查看角色权限
db.getRole("read", {showPrivileges: true})
- 创建角色
超级用户的role有两种,userAdmin或者userAdminAnyDatabase
- 用户相关命令
- 创建用户
db.createUser({arguments})
- 验证用户
db.auth("username","password")
;
- 验证用户
- 查看用户
show users
- 删除用户
db.dropUser("username")
- 查看用户所属角色
db.getUser("username")
- 创建用户
二、实战
创建用户
show dbs
use admin
- 创建
1
2
3
4
5
6
7
8db.createUser({
user:"user123",
pwd:"123456",
roles:[
{role:"userAdminAnyDatabase", db:"admin"},
{role:"read", db:"test"}
]
})show users
或db.system.users.find().pretty()
- 修改密码
1
2
3
4
5
6
7
8
9db.changeUserPassword("user123","abc")
或
db.runCommand({
updateUser:"user123",
pwd:"abc",
customData:{title:"your title"}
})验证
db.auth("user123","123456")
show users
或db.system.users.find().pretty()
查看用户权限
1 | db.runCommand({ |
- 删除用户
db.system.users.remove({user:"testUser"})