詳解MongoDB的角色管理
NO.1 MongoDB內(nèi)建角色
內(nèi)建角色的種類(lèi)和特點(diǎn)?
想要了解內(nèi)建角色,還是少不了下面這張圖,在MongoDB中,用戶(hù)的權(quán)限是通過(guò)角色綁定的方法來(lái)分配的。把某個(gè)角色綁定在某個(gè)用戶(hù)上,那么這個(gè)用戶(hù)就有這個(gè)角色對(duì)應(yīng)的權(quán)限了。
MongoDB 4.0中的內(nèi)建角色類(lèi)型如下:
這里對(duì)上面的內(nèi)建角色所擁有的權(quán)限做以說(shuō)明:
數(shù)據(jù)庫(kù)用戶(hù)角色:
read:用于讀取所有非系統(tǒng)集合,以及下面三個(gè)系統(tǒng)集合:
system.indexes、system.js以及system.namesp
readWrite:擁有read角色的所有權(quán)限,并且可以修改所有非系統(tǒng)集合和system.js集合上的數(shù)據(jù)
數(shù)據(jù)庫(kù)管理角色:
dbAdmin:提供管理相關(guān)功能,例如查詢(xún)統(tǒng)計(jì)信息,索引管理等
userAdmin:提供管理數(shù)據(jù)庫(kù)角色及用戶(hù)的權(quán)限,具有這個(gè)角色的用戶(hù)可以為當(dāng)前數(shù)據(jù)庫(kù)的任何用戶(hù),包括自己,分配任何角色和權(quán)限
dbOwner:提供數(shù)據(jù)庫(kù)所有者的權(quán)限,它可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行任何管理操作,這個(gè)角色結(jié)合了readWrite、dbAdmin、userAdmin三種角色授予的權(quán)限。
集群管理角色:
此類(lèi)角色提供了管理整個(gè)MongoDB的權(quán)限,角色只能在admin數(shù)據(jù)庫(kù)中進(jìn)行授權(quán)。
clusterManager:提供對(duì)集群進(jìn)行管理和監(jiān)控的權(quán)限
clusterMonitor:提供對(duì)監(jiān)控工具的只讀訪問(wèn)權(quán)限
hostManager:提供監(jiān)控和管理服務(wù)器的權(quán)限
clusterAdmin:提供最高的集群管理訪問(wèn)權(quán)限,這個(gè)角色擁有clusterManager、clusterMonitor和hostManager角色授予的權(quán)限,除此之外,它還具有dropDatabase()權(quán)限
備份和恢復(fù)角色:
此類(lèi)角色只能在admin數(shù)據(jù)庫(kù)中備份和恢復(fù)。
backup:提供備份數(shù)據(jù)的權(quán)限,使用mongodump備份整個(gè)mongod實(shí)例
restore:提供還原數(shù)據(jù)庫(kù)所需的權(quán)限,使用戶(hù)可以通過(guò)mongorestore恢復(fù)數(shù)據(jù)
全數(shù)據(jù)庫(kù)角色
全數(shù)據(jù)庫(kù)角色用于管理所有自定義數(shù)據(jù)庫(kù),但是不包含local和config數(shù)據(jù)庫(kù),它只能被授予在admin用戶(hù)下。
超級(jí)用戶(hù):
root,這個(gè)不需要過(guò)多解釋。
用戶(hù)只能在admin數(shù)據(jù)庫(kù)中配置這個(gè)權(quán)限,擁有這個(gè)角色的用戶(hù)可以對(duì)所有數(shù)據(jù)庫(kù)進(jìn)行任何操作。
內(nèi)部角色:
__system僅僅用于MongoDB內(nèi)部的管理,不建議將這個(gè)權(quán)限分配個(gè)用戶(hù),防止用戶(hù)對(duì)內(nèi)部系統(tǒng)進(jìn)行操作。
MongoDB中的角色特點(diǎn)
- 在MongoDB中,授予用戶(hù)某個(gè)角色的權(quán)限時(shí),默認(rèn)授予當(dāng)前數(shù)據(jù)庫(kù)
- 角色授權(quán)可以授予集合級(jí)別的粒度
- 角色授權(quán)分成系統(tǒng)集合以及非系統(tǒng)集合的訪問(wèn)權(quán)限
- 每個(gè)數(shù)據(jù)庫(kù)中的角色都可以分成一般角色和管理角色
- 管理數(shù)據(jù)庫(kù)可以使用所有的內(nèi)建角色
NO.2 創(chuàng)建自定義角色
上面的內(nèi)容,更多的是講述怎樣使用內(nèi)建角色,這里我們來(lái)看創(chuàng)建自定義角色的,
自定義角色有如下三個(gè)特點(diǎn):
1、在一般數(shù)據(jù)庫(kù)上創(chuàng)建的角色,只適用于當(dāng)前數(shù)據(jù)庫(kù)
2、在admin數(shù)據(jù)庫(kù)上創(chuàng)建的角色,可適用于所有數(shù)據(jù)庫(kù)
3、創(chuàng)建角色時(shí),角色名字不能重復(fù),否則報(bào)錯(cuò)alread exist
例如我們想給一個(gè)賬號(hào)分配insert,update、select、而不給delete權(quán)限。
語(yǔ)法:
db.createRole( { role:"<name>", privileges:[ {resource:{<resource>},actions:["action",...]} ], roles:[ {role:"<role>",db:"<database>"}|"<role>" ], authenticationRestrictions:[ {clientSource:["<IP 地址>"|"<CIDR range>",...], {serverAddress:["<IP 地址>"|"<CIDR range>",...]} ] } )
其中,resource為指定數(shù)據(jù)庫(kù)或者集合,若設(shè)置為空,則默認(rèn)當(dāng)前數(shù)據(jù)庫(kù)的全部集合。
actions:指定權(quán)限
范例:
1、首先我們創(chuàng)建一個(gè)角色:
use admin db.createRole( { role:"role_yeyz", privileges:[ {resource:{db:"yeyz",collection:"test"}, actions:["find","insert","update"] } ], roles:[ {role:"read",db:"yeyz1"} ] } )
這個(gè)角色的名字叫做role_yeyz,它具有yeyz這個(gè)數(shù)據(jù)庫(kù)下面的test集合的查找、插入、更新權(quán)限。
同時(shí)它集成了系統(tǒng)的內(nèi)建權(quán)限r(nóng)ead,內(nèi)建權(quán)限的生效數(shù)據(jù)庫(kù)是yeyz1
2、使用show roles查看當(dāng)前角色的創(chuàng)建情況
use admin show roles { "role" : "role_yeyz", "db" : "admin", "isBuiltin" : false, "roles" : [ { "role" : "read", "db" : "yeyz1" } ], "inheritedRoles" : [ { "role" : "read", "db" : "yeyz1" } ] }
這里它只顯示了內(nèi)建角色的信息,注意,這個(gè)角色所在的db是admin
3、此時(shí)我們將這個(gè)角色,授予給一個(gè)新的用戶(hù),yeyz_1
> db.createUser( ... { ... user: "yeyz_1", ... pwd: "123456", ... roles: [ { role: "role_yeyz", db: "admin" }] ... } ... ) Successfully added user: { "user" : "yeyz_1", "roles" : [ { "role" : "role_yeyz", "db" : "admin" } ] }
我們創(chuàng)建了一個(gè)新的用戶(hù)yeyz_1,這個(gè)用戶(hù)繼承了我們第一步的自定義角色role_yeyz
4、開(kāi)始認(rèn)證并執(zhí)行相關(guān)操作。
[root@VM-0-14-centos ~]# mongo MongoDB shell version v4.0.6 connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb Implicit session: session { "id" : UUID("b9daecb8-ffd8-44a7-8af0-d1115057539a") } MongoDB server version: 4.0.6 > use admin switched to db admin > db.auth("yeyz_1","123456") 1 > use yeyz switched to db yeyz ### 測(cè)試查找,成功 > db.test.find() { "_id" : ObjectId("5fa7eae2515b814f18f2d474"), "name" : "aaa" } ### 測(cè)試插入,成功 > db.test.insert({"name":"bbb"}) WriteResult({ "nInserted" : 1 }) > db.test.find() { "_id" : ObjectId("5fa7eae2515b814f18f2d474"), "name" : "aaa" } { "_id" : ObjectId("5fa7f00e523d80402cdfa326"), "name" : "bbb" } ### 測(cè)試更新,成功 > db.test.update({"name":"aaa"},{$set:{"name":"ccc"}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > > db.test.find() { "_id" : ObjectId("5fa7eae2515b814f18f2d474"), "name" : "ccc" } { "_id" : ObjectId("5fa7f00e523d80402cdfa326"), "name" : "bbb" } ### 測(cè)試刪除,失敗,和我們預(yù)期一致,因?yàn)閞ole_yeyz這個(gè)角色,沒(méi)有刪除權(quán)限。 > db.test.remove({"name":"bbb"}) WriteCommandError({ "ok" : 0, "errmsg" : "not authorized on yeyz to execute command { delete: \"test\", ordered: true, lsid: { id: UUID(\"b9daecb8-ffd8-44a7-8af0-d1115057539a\") }, $db: \"yeyz\" }", "code" : 13, "codeName" : "Unauthorized" })
以上就是詳解MongoDB的角色管理的詳細(xì)內(nèi)容,更多關(guān)于MongoDB的角色管理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 詳解MongoDB中的日志模塊
- MongoDB聚合group的操作指南
- java操作mongodb之多表聯(lián)查的實(shí)現(xiàn)($lookup)
- 2021最新版windows10系統(tǒng)MongoDB數(shù)據(jù)庫(kù)安裝及配置環(huán)境
- MongoDB 常用的數(shù)據(jù)類(lèi)型和基本操作
- MongoDB 簡(jiǎn)單入門(mén)教程(安裝、基本概念、創(chuàng)建用戶(hù))
- MongoDB 主分片(primary shard)相關(guān)總結(jié)
- MongoDB 監(jiān)控工具mongostat和mongotop的使用
- MongoDB 副本集的搭建過(guò)程
- MongoDB的chunk詳解
相關(guān)文章
Mongodb啟動(dòng)命令參數(shù)中文說(shuō)明
這篇文章主要介紹了Mongodb啟動(dòng)命令參數(shù)中文說(shuō)明,本文包括基本配置、主/從參數(shù)、Sharding(分片)選項(xiàng)等內(nèi)容,需要的朋友可以參考下2014-10-10Mongodb中MapReduce實(shí)現(xiàn)數(shù)據(jù)聚合方法詳解
Mongodb是針對(duì)大數(shù)據(jù)量環(huán)境下誕生的用于保存大數(shù)據(jù)量的非關(guān)系型數(shù)據(jù)庫(kù),針對(duì)大量的數(shù)據(jù)。接下來(lái)通過(guò)本文給大家介紹Mongodb中MapReduce實(shí)現(xiàn)數(shù)據(jù)聚合方法詳解,感興趣的朋友一起學(xué)習(xí)吧2016-05-05把MongoDB作為循環(huán)隊(duì)列的方法詳解
這篇文章主要給大家介紹了關(guān)于把MongoDB作為循環(huán)隊(duì)列的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03mongodb 命令行下及php中insert數(shù)據(jù)詳解
這篇文章主要介紹了mongodb 命令行下及php中insert數(shù)據(jù)詳解,需要的朋友可以參考下2014-07-07MongoDB查詢(xún)字段沒(méi)有創(chuàng)建索引導(dǎo)致的連接超時(shí)異常解案例分享
這篇文章主要介紹了MongoDB查詢(xún)字段沒(méi)有創(chuàng)建索引導(dǎo)致的連接超時(shí)異常解案例分享,本文是生產(chǎn)環(huán)境下總結(jié)而來(lái),需要的朋友可以參考下2014-10-10