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)
})
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章