Contents

最近工作中用到MongoDB的权限管理,简单记录一下涉及到的知识。
Mongo的账号权限管理是基于角色的,建立账号并赋予角色是基本操作,账号属于库。
账号有分为超级权限和普通权限,超级权限用来管理账号角色,普通权限就是实际操作数据的账号。

MongoDB默认不需要账号登录,不存在初始账号,如果要启用账号认证,需要先建超级权限账号。

1
2
3
4
5
6
7
8
9
10
11
12
ubuntu@wx-dev-com:~$ mongo
MongoDB shell version: 3.2.7
connecting to: test
Server has startup warnings:
2016-08-19T15:25:41.938+0800 I CONTROL [initandlisten]
2016-08-19T15:25:41.939+0800 I CONTROL [initandlisten] ** WARNING: soft rlimits too low. rlimits set to 15726 processes, 64000 files. Number of processes should be at least 32000 : 0.5 times number of files.
>
> use admin
switched to db admin
>
> db.getUsers()
[ ]

创建一个超级权限,包含集群admin权限:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
db.createUser({
"user" : "superman",
"pwd":"ddsc@123",
"roles" : [
{
"role" : "clusterAdmin",
"db" : "admin"
},
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
},
{
"role" : "dbAdminAnyDatabase",
"db" : "admin"
}
]
})

然后使用 auth 参数启动mongoDB就可以启用账号认证,可以直接在命令行加 –auth
或者写配置文件

1
sudo /usr/bin/mongod --config /etc/mongodb.conf --auth

普通账号添加的语法也一样,role使用 readWrite

1
2
3
4
5
6
7
8
9
10
db.createUser({
user:"pointuser",
pwd:"j1234",
roles:[
{
role:"readWrite",
db:"point"
}
]
})

添加成功后可以使用auth命令认证

0:代表授权失败
1:代表授权成功

1
db.auth("pointuser","j1234")

可以对一个账号赋予读写其他库的权限:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
db.grantRolesToUser( "pointuser" , [ { role: "readWrite", db: "mc" } ])  
db.getUsers()
[
{
"_id" : "point.pointuser",
"user" : "pointuser",
"db" : "point",
"roles" : [
{
"role" : "readWrite",
"db" : "mc"
},
{
"role" : "readWrite",
"db" : "point"
}
]
}
]

撤销对某个库的读写权限:

1
db.revokeRolesFromUser( "pointuser" , [ { role: "readWrite", db: "mc" } ])

除了db.createUser(),下面几个函数也是常用的:

  • 获得数据库的所有用户权限信息:db.getUsers()
  • 获得某个用户的权限信息:db.getUser()
  • 创建角色: db.createRole()
  • 更新角色:db.updateRole()
  • 删除角色:db.dropRole()
  • 获得某个角色信息:db.getRole()
  • 删除用户:db.dropUser()
  • 删除所有用户:db.dropAllUsers()
  • 将一个角色赋予给用户:db.grantRolesToUser()
  • 撤销某个用户的某个角色权限:db.revokeRolesFromUser()
  • 更改密码:db.changeUserPassword()
Contents