mongodb用戶權(quán)限
mongodb 開(kāi)啟用戶認(rèn)證:
mongodb開(kāi)啟用戶認(rèn)證之后,要通過(guò)用戶名密碼的方式登錄
現(xiàn)在需要?jiǎng)?chuàng)建一個(gè)帳號(hào),該賬號(hào)需要有g(shù)rant權(quán)限,即:賬號(hào)管理的授權(quán)權(quán)限。注意一點(diǎn),帳號(hào)是跟著庫(kù)走的,所以在指定庫(kù)里授權(quán),必須也在指定庫(kù)里驗(yàn)證(auth)。
use admin
switched to db admin
> db.createUser(
... {
... user: "dba11",
... pwd: "dba11",
... roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
... }
... )
roles:指定用戶的角色,可以用一個(gè)空數(shù)組給新用戶設(shè)定空角色;在roles字段,可以指定內(nèi)置角色和用戶定義的角色。role里的角色可以選:
1.數(shù)據(jù)庫(kù)用戶角色:read、readWrite;
2. 數(shù)據(jù)庫(kù)管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 備份恢復(fù)角色:backup、restore;
5. 所有數(shù)據(jù)庫(kù)角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超級(jí)用戶角色:root
// 這里還有幾個(gè)角色間接或直接提供了系統(tǒng)超級(jí)用戶的訪問(wèn)(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 內(nèi)部角色:__system
Read:允許用戶讀取指定數(shù)據(jù)庫(kù)
readWrite:允許用戶讀寫(xiě)指定數(shù)據(jù)庫(kù)
dbAdmin:允許用戶在指定數(shù)據(jù)庫(kù)中執(zhí)行管理函數(shù),如索引創(chuàng)建、刪除,查看統(tǒng)計(jì)或訪問(wèn)system.profile
userAdmin:允許用戶向system.users集合寫(xiě)入,可以找指定數(shù)據(jù)庫(kù)里創(chuàng)建、刪除和管理用戶
clusterAdmin:只在admin數(shù)據(jù)庫(kù)中可用,賦予用戶所有分片和復(fù)制集相關(guān)函數(shù)的管理權(quán)限。
readAnyDatabase:只在admin數(shù)據(jù)庫(kù)中可用,賦予用戶所有數(shù)據(jù)庫(kù)的讀權(quán)限
readWriteAnyDatabase:只在admin數(shù)據(jù)庫(kù)中可用,賦予用戶所有數(shù)據(jù)庫(kù)的讀寫(xiě)權(quán)限
userAdminAnyDatabase:只在admin數(shù)據(jù)庫(kù)中可用,賦予用戶所有數(shù)據(jù)庫(kù)的userAdmin權(quán)限:userAdminAnyDatabase 角色,用來(lái)管理用戶,可以通過(guò)這個(gè)角色來(lái)創(chuàng)建、刪除用戶。驗(yàn)證:需要開(kāi)啟auth參數(shù)。
dbAdminAnyDatabase:只在admin數(shù)據(jù)庫(kù)中可用,賦予用戶所有數(shù)據(jù)庫(kù)的dbAdmin權(quán)限。
root:只在admin數(shù)據(jù)庫(kù)中可用。超級(jí)賬號(hào),超級(jí)權(quán)限
----------------------------------
show users; 查看當(dāng)前庫(kù)下的用戶
因?yàn)閹ぬ?hào)都是在當(dāng)前需要授權(quán)的數(shù)據(jù)庫(kù)下授權(quán)的,那要是不在當(dāng)前數(shù)據(jù)庫(kù)下會(huì)怎么樣?
> db
admin
> db.createUser(
... {
... user: "wbx",
... pwd: "wbx",
... roles: [
... { role: "readWrite", db: "sss" }, #在當(dāng)前庫(kù)下創(chuàng)建其他庫(kù)的帳號(hào),在admin庫(kù)下創(chuàng)建test、abc庫(kù)的帳號(hào)
... { role: "readWrite", db: "sssss" }
... ]
... }
... )
> show users;
創(chuàng)建了這么多帳號(hào),怎么查看所有帳號(hào)?
db.system.users.find().pretty()
**********************************************************************************
造數(shù)測(cè)試:
for (var i = 1; i <= 100000; i++) {
db.db01.insert( { x : i , name: "MACLEAN" , sex:"女", name2:"maira", name3:"MACLEAN"} )
}
use db01
db.data.find({x:{$gt:40}}).explain();