安装好MongoDB时,通常开了一个最高管理权限的root账户来方便我们管理数据库,实际开发中并一般不使用这个账户,我们可以单独添加一个账户来连接数据库。

MongoDB的账户角色:

数据库用户角色:read、readWrite

数据库管理角色:dbAdmin、dbOwner、userAdmin

集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManage

备份恢复角色:backup、restore

所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase

超级用户角色:root

内部角色:__system

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

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

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

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

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

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

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

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

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

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

新增一个readWriteAnyDatabase的角色账户
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#以root登录(这个root的角色是userAdminAnyDatabase)
./mongo --port 27017 -u "root" -p "xxx" --authenticationDatabase "admin"
#切换到admin db
use admin
#查看所有用户
db.system.users.find()
#新增用户,并授予readWriteAnyDatabase的角色
db.createUser({user:"mongodb-admin",pwd:"123456",roles:[{role:"readWriteAnyDatabase", db:"admin"}]})
#新增xxxx角色
#db.grantRolesToUser("mongodb-admin",[{role:"xxx",db:"admin"}])
#以mongodb-admin登录
mongo --port 27017 -u mongodb-admin -p '123456' --authenticationDatabase 'admin'
#测试创建集合和查询,如果没有报错,说明权限已经ok
use test
db.createCollection("Account")
db.Account.find()