1. 了解Admin資料庫
新安裝的MongoDB是沒有賬号設定,不用安全驗證,任何人隻要連接配接上服務就可以進行CRUD操作,這是非常不安全的。
是以我們需要對MongoDB進行設定賬号,來控制對資料庫的通路。
mongodb沒有預設管理者賬号,先添加管理者賬号,再開啟權限認證
切換到admin資料庫,添加的賬号才是管理者賬号
管理者可以管理所有資料庫,但要先在admin資料庫認證後才可以管理其他資料庫
MongoDB預設有一個admin資料庫,admin.system.users中将會儲存比在其它資料庫中設定的使用者權限更大的使用者資訊
當admin.system.users中一個使用者都沒有時,即使mongod啟動時添加了- -auth參數,如果沒有在admin資料庫中添加使用者,此時不進行任何認證還是可以做任何操作,直到在admin.system.users中添加了一個使用者
2. 角色與權限
Mongodb的授權采用了角色授權的方法,每個角色包括一組權限
Mongodb已經定義好了的角色叫内建角色,我們也可以自定義角色
MongoDB角色有:
- 資料庫使用者角色:read、readWrite;
- 資料庫管理角色:dbAdmin、dbOwner、userAdmin;
- 叢集管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
- 備份恢複角色:backup、restore;
- 所有資料庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超級使用者角色:root;
- 内部角色:__system;
MongoDB權限:
- read: 允許使用者讀取指定資料庫
- readWrite: 允許使用者讀寫指定資料庫
- dbAdmin:允許使用者在指定資料庫中執行管理函數,如索引建立、删除,檢視統計或通路system.profile
- userAdmin:允許使用者向system.users集合寫入,可以找指定資料庫裡建立、删除和管理使用者
- clusterAdmin:隻在admin資料庫中可用,具有所有分片和複制集相關函數的管理權限。
- readAnyDatabase:隻在admin資料庫中可用,具有所有資料庫的讀權限
- readWriteAnyDatabase:隻在admin資料庫中可用,具有所有資料庫的讀寫權限
- userAdminAnyDatabase:隻在admin資料庫中可用,具有所有資料庫的userAdmin權限
- dbAdminAnyDatabase:隻在admin資料庫中可用,具有所有資料庫的dbAdmin權限。
- root:隻在admin資料庫中可用。超級賬号,超級權限
3. 建立角色
建立普通使用者:
>use foobar
>db.createUser(
{ user:"foobarUser",
pwd:"foo",
roles:[{role:"readWrite",db:”foobar”}],
}
)
建立使用者管理者:
>use admin
>db.createUser(
{ user:"Useradmin",
pwd:"Userpwd",
roles:["userAdminAnyDatabase"],
}
)
建立資料庫管理者:
use admin
db.createUser(
{ user:"DbUser",
pwd:"DbPwd“,roles:["readWriteAnyDatabase", "dbAdminAnyDatabase"]
}
);
查詢某個資料庫下的使用者:
删除指定使用者:
使用者管理者和資料庫管理者差別:
- 使用者管理者具有在admin和其他資料庫建立使用者賬戶的功能
- 資料庫管理者賬戶用來管理資料庫、叢集、複制和MongoDB的其他方面