2020年了,你的MongoDB加权限验证了么

翻了很多文章,也踩了很多坑,希望这篇文章能帮到也在给MongoDB设置权限的你。本文章采用nodejs后台为例。

1.进入mongodb的shell

mongo

2.切换到admin数据库

use admin

3.创建admin超级管理员用户

指定用户的角色和数据库

db.createUser(  
  { 
    user: "admin",  
    customData:{description:"superuser"},
    pwd: "admin",  
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]  
  }  
)  

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

4.创建一个不受访问限制的超级用户

拥有所有数据库的读写权限

db.createUser(  
  { 
    user:"root",
    pwd:"root",
    roles:["root"]
  }  
)  

5.创建一个业务数据库管理员用户

以数据库名为survey为例

db.createUser({
  user:"surveyUser",
  pwd:"123456",
  customData:{
      name:'bruce',
      email:'[email protected]',
      age:18,
  },
  roles:[
      {role:"readWrite",db:"admin"},
      {role:"readWrite",db:"survey"},
      'read'// 对其他数据库有只读权限,对admin、survey是读写权限
  ]
})
  1. 数据库用户角色:read、readWrite;
  2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
  3. 集群管理角色:clusterAdmin、clusterManager、4. clusterMonitor、hostManage;
  4. 备份恢复角色:backup、restore;
  5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  6. 超级用户角色:root
  7. 内部角色:__system
  1. Read:允许用户读取指定数据库
  2. readWrite:允许用户读写指定数据库
  3. dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
  4. userAdmin:允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户
  5. clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
  6. readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
  7. readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
  8. userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
  9. dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
  10. root:只在admin数据库中可用。超级账号,超级权限

6.查看所有创建用户

show users

7.修改密码和用户信息

db.runCommand(
  {
    updateUser:"surveyUser",
    pwd:"xxx",
    customData:{name:"xxx"}
  }
)

8.登录用户

use admin
// 登录权限用户,返回1表示成功
db.auth('surveyUser','123456')

// 切换至survey数据库
use survey

9.启用权限验证

// mongod.conf文件最后加上(默认路径:/usr/local/etc/mongod.conf)
security:
    authorization: enabled

10.重启

关掉命令窗口后重新启动,再次通过mongo命令登入

11.项目对应修改

// app.js文件
mongoose.connect(process.env.MONGO || 'mongodb://127.0.0.1:27017/surveydb', {
  auth: {
    authdb: 'admin',
    user: 'surveyUser',
    password: '123456'
  }
  // useNewUrlParser: true
}).then(() => {
  console.log('db connect ok')
}).catch(err => {
  console.log('db error', err)
})
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章