目錄
- NO.1 MongoDB內建角色
- 內建角色的種類和特點?
- 數據庫用戶角色:
- 數據庫管理角色:
- 集群管理角色:
- 備份和恢復角色:
- 全數據庫角色
- 超級用戶:
- 內部角色:
- MongoDB中的角色特點
- NO.2 創建自定義角色
NO.1 MongoDB內建角色
內建角色的種類和特點?
想要了解內建角色,還是少不了下面這張圖,在MongoDB中,用戶的權限是通過角色綁定的方法來分配的。把某個角色綁定在某個用戶上,那么這個用戶就有這個角色對應的權限了。

MongoDB 4.0中的內建角色類型如下:

這里對上面的內建角色所擁有的權限做以說明:
數據庫用戶角色:
read:用于讀取所有非系統集合,以及下面三個系統集合:
system.indexes、system.js以及system.namesp
readWrite:擁有read角色的所有權限,并且可以修改所有非系統集合和system.js集合上的數據
數據庫管理角色:
dbAdmin:提供管理相關功能,例如查詢統計信息,索引管理等
userAdmin:提供管理數據庫角色及用戶的權限,具有這個角色的用戶可以為當前數據庫的任何用戶,包括自己,分配任何角色和權限
dbOwner:提供數據庫所有者的權限,它可以對數據庫進行任何管理操作,這個角色結合了readWrite、dbAdmin、userAdmin三種角色授予的權限。
集群管理角色:
此類角色提供了管理整個MongoDB的權限,角色只能在admin數據庫中進行授權。
clusterManager:提供對集群進行管理和監控的權限
clusterMonitor:提供對監控工具的只讀訪問權限
hostManager:提供監控和管理服務器的權限
clusterAdmin:提供最高的集群管理訪問權限,這個角色擁有clusterManager、clusterMonitor和hostManager角色授予的權限,除此之外,它還具有dropDatabase()權限
備份和恢復角色:
此類角色只能在admin數據庫中備份和恢復。
backup:提供備份數據的權限,使用mongodump備份整個mongod實例
restore:提供還原數據庫所需的權限,使用戶可以通過mongorestore恢復數據
全數據庫角色
全數據庫角色用于管理所有自定義數據庫,但是不包含local和config數據庫,它只能被授予在admin用戶下。
超級用戶:
root,這個不需要過多解釋。
用戶只能在admin數據庫中配置這個權限,擁有這個角色的用戶可以對所有數據庫進行任何操作。
內部角色:
__system僅僅用于MongoDB內部的管理,不建議將這個權限分配個用戶,防止用戶對內部系統進行操作。
MongoDB中的角色特點
- 在MongoDB中,授予用戶某個角色的權限時,默認授予當前數據庫
- 角色授權可以授予集合級別的粒度
- 角色授權分成系統集合以及非系統集合的訪問權限
- 每個數據庫中的角色都可以分成一般角色和管理角色
- 管理數據庫可以使用所有的內建角色
NO.2 創建自定義角色
上面的內容,更多的是講述怎樣使用內建角色,這里我們來看創建自定義角色的,
自定義角色有如下三個特點:
1、在一般數據庫上創建的角色,只適用于當前數據庫
2、在admin數據庫上創建的角色,可適用于所有數據庫
3、創建角色時,角色名字不能重復,否則報錯alread exist
例如我們想給一個賬號分配insert,update、select、而不給delete權限。
語法:
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為指定數據庫或者集合,若設置為空,則默認當前數據庫的全部集合。
actions:指定權限
范例:
1、首先我們創建一個角色:
use admin
db.createRole(
{
role:"role_yeyz",
privileges:[
{resource:{db:"yeyz",collection:"test"},
actions:["find","insert","update"]
}
],
roles:[
{role:"read",db:"yeyz1"}
]
}
)
這個角色的名字叫做role_yeyz,它具有yeyz這個數據庫下面的test集合的查找、插入、更新權限。
同時它集成了系統的內建權限read,內建權限的生效數據庫是yeyz1
2、使用show roles查看當前角色的創建情況
use admin
show roles
{
"role" : "role_yeyz",
"db" : "admin",
"isBuiltin" : false,
"roles" : [
{
"role" : "read",
"db" : "yeyz1"
}
],
"inheritedRoles" : [
{
"role" : "read",
"db" : "yeyz1"
}
]
}
這里它只顯示了內建角色的信息,注意,這個角色所在的db是admin
3、此時我們將這個角色,授予給一個新的用戶,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"
}
]
}
我們創建了一個新的用戶yeyz_1,這個用戶繼承了我們第一步的自定義角色role_yeyz
4、開始認證并執行相關操作。
[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
### 測試查找,成功
> db.test.find()
{ "_id" : ObjectId("5fa7eae2515b814f18f2d474"), "name" : "aaa" }
### 測試插入,成功
> db.test.insert({"name":"bbb"})
WriteResult({ "nInserted" : 1 })
> db.test.find()
{ "_id" : ObjectId("5fa7eae2515b814f18f2d474"), "name" : "aaa" }
{ "_id" : ObjectId("5fa7f00e523d80402cdfa326"), "name" : "bbb" }
### 測試更新,成功
> 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" }
### 測試刪除,失敗,和我們預期一致,因為role_yeyz這個角色,沒有刪除權限。
> 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的角色管理的詳細內容,更多關于MongoDB的角色管理的資料請關注腳本之家其它相關文章!
您可能感興趣的文章:- 詳解MongoDB中的日志模塊
- MongoDB聚合group的操作指南
- java操作mongodb之多表聯查的實現($lookup)
- 2021最新版windows10系統MongoDB數據庫安裝及配置環境
- MongoDB 常用的數據類型和基本操作
- MongoDB 簡單入門教程(安裝、基本概念、創建用戶)
- MongoDB 主分片(primary shard)相關總結
- MongoDB 監控工具mongostat和mongotop的使用
- MongoDB 副本集的搭建過程
- MongoDB的chunk詳解