# mongodb - 权限管理
# 遇到问题
需要增加用户权限来控制数据的连接,免得数据库裸奔。
- 创建管理员用户,设置权限
# 进入 mongodb 的 shell
mongo
# 切换数据,到 admin
show dbs
use admin
# 创建 admin 超级管理员用户
db.createUser(
{ user: "root",
customData:{description:"superuser"},
pwd: "123456",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
# 如果已经创建了,可以先获取权限
db.auth('root','123456')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
user字段,为新用户的名字;
pwd字段,用户的密码;
customData字段,为任意内容,例如可以为用户全名介绍;
roles字段,指定用户的角色,可以用一个空数组给新用户设定空角色。在roles字段,可以指定内置角色和用户定义的角色。超级用户的role有两种,userAdmin或者userAdminAnyDatabase(比前一种多加了对所有数据库的访问,仅仅是访问而已)。
db是指定数据库的名字,admin是管理数据库。不能用admin数据库中的用户登录其他数据库。注:只能查看当前数据库中的用户,哪怕当前数据库admin数据库,也只能查看admin数据库中创建的用户。
- 创建业务数据库管理员用户
只负责某一个或几个数据库的增删改查
> db.createUser({
user:"user001",
pwd:"123456",
roles:[
{role:"readWrite",db:"db001"},
{role:"readWrite",db:"db002"},
'read'// 对其他数据库有只读权限,对db001、db002是读写权限
]
})
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
MongoDB 数据库角色:
- 数据库用户角色:read、readWrite;
- 数据库管理角色:dbAdmin、dbOwner、userAdmin;
- 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
- 备份恢复角色:backup、restore;
- 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户角色:root // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
- 内部角色:__system
角色说明:
- Read:允许用户读取指定数据库
- readWrite:允许用户读写指定数据库
- dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
- userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
- clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
- readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
- readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
- userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
- dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
- root:只在admin数据库中可用。超级账号,超级权限
- 查看创建的用户
show users
或 db.system.users.find()
或 db.runCommand({usersInfo:"userName"})
1
2
3
2
3
- 修改密码
use admin
db.changeUserPassword("username", "xxx")
1
2
2
- 修改用户信息
db.runCommand(
{
updateUser:"username",
pwd:"xxx",
customData:{title:"xxx"}
}
)
db.updateUser("username",
{pwd:"xxx",roles:[{role:"read",db:"test"}]}
)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
- 追加用户权限
db.grantRolesToUser("username",
[{role:"readWrite",db:"test"}]
)
1
2
3
2
3
- 删除用户
db.dropUser("username")
1
- 启用 mongodb 权限验证:
- 命令行启动的时候
mongo --auth
- 使用 mongo.conf :
# 启用权限访问
auth=true
1
2
2
- 重启 mongodb
1
连接配置
{
"uri": "mongodb://user486:123456@localhost:27017/movie?authSource=movie",
"options": {
"useNewUrlParser": true,
"useUnifiedTopology": true
}
}
1
2
3
4
5
6
7
2
3
4
5
6
7