当你的MongoDB数据库在本地使用时不需要账号密码没问题,但是当部署到服务器时是不能没有身份验证的。今天学习MongoDB用户配置,在此稍作记录。

MongoDB中的用户类型/user

常用MongDB的用户类型

  • 超级管理员:拥有最高权限,可以对任何数据库进行任意操作
  • 管理员用户:拥有当前数据库最高权限,可以对当前库进行任意操作
  • 数据库用户:只拥有对当前数据库数据的读写权利

MongoDB中的角色/权限/role

创建用户的时候需要指定用户的对于某个数据库是什么角色

可以理解为对某个数据库的权限设置

Read:允许用户读取指定数据库

readWrite:允许用户读写指定数据库

dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户

clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。

readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限

readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限

userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限

dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。

root:只在admin数据库中可用。超级账号,超级权限

用户相关的方法

https://docs.mongodb.com/manual/core/security-users/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#添加用户:
db.createUser({
user: "<name>", //用户名
pwd: "<cleartext password>",
customData: { <any information> }, //可选的,备注信息。
roles: [
{ role: "<role>", db: "<database>" } | "<role>", //指定角色
...
]},
writeConcern: { <write concern> }
)
#更改用户信息:将会覆盖掉原先的用户信息
root(
"<username>",
{
customData : { <any information> },
roles : [
{ role: "<role>", db: "<database>" } | "<role>",
...
],
pwd: "<cleartext password>"
},
writeConcern: { <write concern> }
)

用户验证登陆的两种方式

注意点:验证的用户的时候,必须在该用户创建的数据库验证
1
2
mongod --auth
#开启验证
1.连接数据库时验证

权限验证一定要在建立该账户的数据库上进行

1
mongo xx.xx.xx.xx:xxx/test -u "admin" -p "adminPass"
2.连接之后再进行验证
1
2
3
4
mongo --port 27017
use admin
db.auth("admin", "adminPass")

实践

1.创建超级管理员用户

1
sudo mongod --logpath=./log/log.log # 启动mongoDB
1
2
3
4
5
6
7
8
9
10
11
12
mongo
#进入mongo shell
use admin
#切换到admin数据库
db.system.users.find()
#可以查看下admin下用户,默认应该是没有数据的
db.createUser({
user:'admin',
pwd:'adminPass',
roles:['root']
})
Successfully added user: { "user" : "admin", "roles" : [ "root" ] }

###