# mongodb - 权限管理

# 遇到问题

需要增加用户权限来控制数据的连接,免得数据库裸奔。

  1. 创建管理员用户,设置权限
# 进入 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

user字段,为新用户的名字;
pwd字段,用户的密码;
customData字段,为任意内容,例如可以为用户全名介绍;
roles字段,指定用户的角色,可以用一个空数组给新用户设定空角色。在roles字段,可以指定内置角色和用户定义的角色。超级用户的role有两种,userAdmin或者userAdminAnyDatabase(比前一种多加了对所有数据库的访问,仅仅是访问而已)。
db是指定数据库的名字,admin是管理数据库。不能用admin数据库中的用户登录其他数据库。注:只能查看当前数据库中的用户,哪怕当前数据库admin数据库,也只能查看admin数据库中创建的用户。

  1. 创建业务数据库管理员用户

只负责某一个或几个数据库的增删改查

> 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

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数据库中可用。超级账号,超级权限
  1. 查看创建的用户
show users 
或 db.system.users.find() 
或 db.runCommand({usersInfo:"userName"})
1
2
3
  1. 修改密码
use admin
db.changeUserPassword("username", "xxx")
1
2
  1. 修改用户信息
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
  1. 追加用户权限
db.grantRolesToUser("username",
    [{role:"readWrite",db:"test"}]
)
1
2
3
  1. 删除用户
db.dropUser("username")
1
  1. 启用 mongodb 权限验证:
  • 命令行启动的时候 mongo --auth
  • 使用 mongo.conf :
# 启用权限访问
  auth=true
1
2
  1. 重启 mongodb

1

连接配置

{
  "uri": "mongodb://user486:123456@localhost:27017/movie?authSource=movie",
  "options": {
    "useNewUrlParser": true,
    "useUnifiedTopology": true
  }
}
1
2
3
4
5
6
7

# 参考

上次更新: 4/23/2021, 9:43:10 AM