mongodb使用者許可權管理最全攻略:使用者的建立、檢視、刪除與修改,mongodb入坑之旅

web525發表於2018-07-11

1、進入mongodb的shell :

mongo

2、切換資料庫

use admin

3、建立admin超級管理員使用者

指定使用者的角色和資料庫:
(注意此時新增的使用者都只用於admin資料庫,而非你儲存業務資料的資料庫)
(在cmd中敲多行程式碼時,直接敲回車換行,最後以分號首尾)

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:"pwd",
        roles:["root"]
    }
)

5、建立一個業務資料庫管理員使用者

(只負責某一個或幾個資料庫的増查改刪)

> db.createUser({
    user:"user001",
    pwd:"123456",
    customData:{
        name:`jim`,
        email:`jim@qq.com`,
        age:18,
    },
    roles:[
        {role:"readWrite",db:"db001"},
        {role:"readWrite",db:"db002"},
        `read`// 對其他資料庫有隻讀許可權,對db001、db002是讀寫許可權
    ]
})
  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 或 db.system.users.find() 或 db.runCommand({usersInfo:"userName"})

7、修改密碼

use admin
db.changeUserPassword("username", "xxx")

8、修改密碼和使用者資訊

db.runCommand(
    {
        updateUser:"username",
        pwd:"xxx",
        customData:{title:"xxx"}
    }
)

重要的一步

啟用許可權驗證(別TM的武裝了大半天,大門還一直開著,還抱怨我方防禦塔怎麼一直被摧毀)

mongo --auth

或者修改mongo.conf,最後一行新增

#啟用許可權訪問
auth=true

9、重新啟動mongodb

net stop mongodb;
net start mongodb;

  1. 和使用者管理相關的操作基本都要在admin資料庫下執行,要先use admin;
  2. 如果在某個單一的資料庫下,那隻能對當前資料庫的許可權進行操作;
  3. db.addUser是老版本的操作,現在版本也還能繼續使用,建立出來的user是帶有root role的超級管理員。

相關文章