摘要:每個(gè)角色只應(yīng)該為該角色授予必要的權(quán)限,并且只應(yīng)該為用戶(hù)分配適合其需求的角色。注解如果您還在掌握查詢(xún)語(yǔ)言,像這樣的工具有一個(gè)直觀的用戶(hù)管理器特性,這使得用戶(hù)管理更加直觀和直觀。
本文來(lái)自MongoDB中文社區(qū):http://www.mongoing.com/
1、介紹本文討論保護(hù)MongoDB數(shù)據(jù)庫(kù)所需的訪問(wèn)控制。具體來(lái)說(shuō),我們可以使用這些特性來(lái)確保只有經(jīng)過(guò)授權(quán)的用戶(hù)才能訪問(wèn)數(shù)據(jù)庫(kù)。每個(gè)MongoDB用戶(hù)應(yīng)該只能訪問(wèn)他們?cè)诮M織中所扮演的角色所需要的數(shù)據(jù),這由組織中負(fù)責(zé)管理數(shù)據(jù)安全的人員來(lái)決定。這是管理數(shù)據(jù)和遵守國(guó)際要求所必需的良好特質(zhì)。
1.1 訪問(wèn)控制訪問(wèn)控制確保訪問(wèn)數(shù)據(jù)庫(kù)的人員得到明確的標(biāo)識(shí),并且能夠訪問(wèn)、更新或刪除他們有權(quán)訪問(wèn)的數(shù)據(jù)。這是我們將在本文中討論的主題。在數(shù)據(jù)庫(kù)中,我們可以處理客戶(hù)機(jī)的身份驗(yàn)證和它們希望執(zhí)行的操作的授權(quán)。
1.2 認(rèn)證當(dāng)客戶(hù)機(jī)或用戶(hù)訪問(wèn)數(shù)據(jù)庫(kù)時(shí),第一個(gè)任務(wù)是檢查該用戶(hù)是否是已知用戶(hù),并提供憑證以確保能夠令人信服地識(shí)別他們,這就是所謂的身份驗(yàn)證。使用MongoDB,我們可以使用以下工具之一來(lái)處理認(rèn)證問(wèn)題。
1.2.1 內(nèi)部工具SCRAM:MongoDB默認(rèn)身份驗(yàn)證機(jī)制。它根據(jù)用戶(hù)名、密碼來(lái)進(jìn)行數(shù)據(jù)庫(kù)身份驗(yàn)證。
x.509證書(shū):該機(jī)制使用x.509證書(shū)代替用戶(hù)名和密碼?;诟北炯蚍制褐械姆?wù)器或成員對(duì)客戶(hù)機(jī)進(jìn)行身份驗(yàn)證。維基百科上說(shuō):“x.509證書(shū)包含公鑰和標(biāo)識(shí),由證書(shū)頒發(fā)機(jī)構(gòu)或自簽名,持有證書(shū)的人可以依賴(lài)證書(shū)所包含的公鑰來(lái)建立安全通信”。
LDAP:這個(gè)協(xié)議最常見(jiàn)的用途是提供一個(gè)中心服務(wù)器來(lái)存儲(chǔ)用戶(hù)名和密碼,允許不同的應(yīng)用程序連接到LDAP服務(wù)器來(lái)驗(yàn)證用戶(hù)。
Kerberos:這是一個(gè)基于票據(jù)的行業(yè)標(biāo)準(zhǔn)認(rèn)證協(xié)議。
注解:外部工具只在MongoDB企業(yè)版中提供。
作為一種最佳實(shí)踐,我們將為需要訪問(wèn)數(shù)據(jù)庫(kù)的每個(gè)實(shí)體創(chuàng)建登錄憑據(jù),但只針對(duì)這些實(shí)體。這樣做,我們將能夠?qū)徲?jì)所有用戶(hù)所做的所有活動(dòng),并完成GDPR要求。除了用戶(hù)身份驗(yàn)證之外,還需要對(duì)服務(wù)器和網(wǎng)絡(luò)進(jìn)程進(jìn)行身份驗(yàn)證。在一套副本或分片集群的所有節(jié)點(diǎn)檢查彼此不斷為了確保都是已知的訪問(wèn)用戶(hù)(換句話說(shuō),確認(rèn)他們的會(huì)員),以及其他任務(wù),比如檢查每個(gè)成員的健康為了確定副本必須完成一次新的選舉。那么什么是選舉呢?在MongoDB中,只有一個(gè)節(jié)點(diǎn)能夠執(zhí)行寫(xiě)操作。當(dāng)此節(jié)點(diǎn)關(guān)閉或網(wǎng)絡(luò)部分開(kāi)始工作時(shí),其余節(jié)點(diǎn)開(kāi)始進(jìn)行一次選擇,以便選擇新的主節(jié)點(diǎn)并使服務(wù)在不停止的情況下運(yùn)行。
1.3 授權(quán)數(shù)據(jù)庫(kù)管理員負(fù)責(zé)向用戶(hù)授予或拒絕對(duì)數(shù)據(jù)庫(kù)資源進(jìn)行操作的權(quán)限。通過(guò)使用角色,我們可以指定對(duì)資源執(zhí)行什么操作。因此,角色是授予用戶(hù)使用特定資源執(zhí)行特定任務(wù)的權(quán)限。
資源←動(dòng)作←角色(權(quán)限)→用戶(hù)
MongoDB提供內(nèi)置角色,還允許您根據(jù)數(shù)據(jù)庫(kù)的特定需求定義新的角色。這些角色是根據(jù)對(duì)資源的操作來(lái)定義的。動(dòng)作是我們可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行所有類(lèi)型的操作,例如查找、刪除、插入、更新或創(chuàng)建索引。資源可以是集合、文檔、索引、數(shù)據(jù)庫(kù)等等。使用只讀視圖,管理員通過(guò)限制對(duì)只公開(kāi)其子集的敏感數(shù)據(jù)的訪問(wèn)來(lái)獲得字段級(jí)安全性。對(duì)視圖授予的權(quán)限與授予底層集合的權(quán)限是分開(kāi)指定的。每個(gè)角色只應(yīng)該為該角色授予必要的權(quán)限,并且只應(yīng)該為用戶(hù)分配適合其需求的角色。
1.4 數(shù)據(jù)庫(kù)的身份驗(yàn)證MongoDB用戶(hù)必須使用最初創(chuàng)建它們的數(shù)據(jù)庫(kù)來(lái)標(biāo)識(shí)自己。這通常是管理數(shù)據(jù)庫(kù),但也可以是其他數(shù)據(jù)庫(kù)。無(wú)論在哪個(gè)數(shù)據(jù)庫(kù)上創(chuàng)建了用戶(hù),如果將適當(dāng)?shù)慕巧谟枇擞脩?hù),他們將能夠?qū)ζ渌麛?shù)據(jù)庫(kù)采取操作。
2、MongoDB用戶(hù)在啟用訪問(wèn)控制之前,應(yīng)該創(chuàng)建一個(gè)用戶(hù),該用戶(hù)可以在啟用訪問(wèn)控制后創(chuàng)建用戶(hù)并為用戶(hù)分配角色。然后,這個(gè)用戶(hù)管理員將用于創(chuàng)建和維護(hù)其他用戶(hù)和角色,因此需要分配一個(gè)合適的角色來(lái)支持。如果你不創(chuàng)建此管理用戶(hù),則在啟用訪問(wèn)控制時(shí)將無(wú)法登錄或創(chuàng)建新用戶(hù)和角色。
2.1 本地主機(jī)異常如果在沒(méi)有創(chuàng)建至少一個(gè)管理用戶(hù)的情況下啟用訪問(wèn)控制,則無(wú)法登錄。localhost異常允許您在啟用訪問(wèn)控制之后創(chuàng)建第一個(gè)用戶(hù),從而避免了這個(gè)問(wèn)題。要做到這一點(diǎn),你需要:
? 啟用訪問(wèn)控制
? 連接到localhost接口
? 在管理數(shù)據(jù)庫(kù)中創(chuàng)建第一個(gè)用戶(hù),該用戶(hù)必須具有足夠的權(quán)限來(lái)管理其他用戶(hù)和角色。
這個(gè)localhost異常只適用于仍然沒(méi)有創(chuàng)建用戶(hù)的情況。您必須在兩個(gè)選項(xiàng)中進(jìn)行選擇,在啟用訪問(wèn)控制之前創(chuàng)建第一個(gè)用戶(hù),或者在啟用訪問(wèn)控制之后使用localhost異常創(chuàng)建第一個(gè)用戶(hù)。
2.2 如何啟用訪問(wèn)控制在啟動(dòng)mongod服務(wù)時(shí),可以使用參數(shù)指定數(shù)據(jù)庫(kù)的特性,或者更好的方法是使用配置文件。無(wú)論哪種方式,你都必須使用安全選項(xiàng):
security
authorization:enabled
此設(shè)置啟用或禁用基于角色的訪問(wèn)控制(譯者注:上面的配置是激活狀態(tài))。
在創(chuàng)建MongoDB用戶(hù)之前,有必要考慮一下用戶(hù)將要執(zhí)行的任務(wù)。可能會(huì)有幾個(gè)具有相同權(quán)限級(jí)別的用戶(hù),所以最明智的選擇是創(chuàng)建一個(gè)角色并將其分配給每個(gè)用戶(hù)。通過(guò)只更改一個(gè)角色,您將更新所有使用它的用戶(hù)的權(quán)限。否則,需要為每個(gè)用戶(hù)對(duì)一組或一類(lèi)用戶(hù)的訪問(wèn)需求進(jìn)行更改。操作步驟如下:
第一步:將上下文更改為要?jiǎng)?chuàng)建角色的數(shù)據(jù)庫(kù):
use admin 第二步:執(zhí)行這個(gè)命令:
db.createUser({
user : "",
pwd : "",
roles : [ { role : "", db : " " } | " ", …]
})
如果您想創(chuàng)建一個(gè)用戶(hù)而不為該用戶(hù)分配任何角色,您只需指定一個(gè)空的roles字段。
注解:如果您還在掌握MongoDB查詢(xún)語(yǔ)言,像MongoDB IDE Studio 3T這樣的工具有一個(gè)直觀的用戶(hù)管理器特性,這使得用戶(hù)管理更加直觀和直觀。
MongoDB IDE Studio 3T地址:https://studio3t.com/
用戶(hù)管理器地址:https://studio3t.com/knowledg...
假設(shè)您有合適的登陸角色并允許刪除用戶(hù),您將需要將上下文更改到創(chuàng)建數(shù)據(jù)庫(kù)的時(shí)候,
use admin
之后執(zhí)行如下命令: db.dropUser("2.5 用戶(hù)存儲(chǔ)在哪里?")
要檢查用戶(hù),必須將上下文更改為創(chuàng)建用戶(hù)的數(shù)據(jù)庫(kù)的情景,例如管理員數(shù)據(jù)庫(kù)。
2.6 如何登陸?> use "" 然后您可以使用其中之一 > db.system.users.find() 或者 > db.getUsers() 但是,如果您只想詢(xún)問(wèn)特定的用戶(hù),請(qǐng)使用以下命令: > db.getUser(" ")
有三種可能的情況,顯然它們都有相同的哲學(xué)。讓我們來(lái)看看:
2.6.1 在數(shù)據(jù)庫(kù)內(nèi)部
$ mongouse ""
db.auth(""," ")
我不建議您使用此方法,因?yàn)樵谀I入密碼時(shí)密碼是可見(jiàn)的。
2.6.2 通過(guò)Shell腳本
$ mongo --authenticationDatabase-u -p
MongoDB shell version v3.6.4-rc0
Enter password:
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.4-rc0
MongoDB Enterprise >
從MongoDB客戶(hù)端,我們必須使用這樣的連接字符串:
2.7 怎樣注銷(xiāo)
mongo://: @ :27017/ ?options
注銷(xiāo)結(jié)束當(dāng)前身份驗(yàn)證會(huì)話。您必須在經(jīng)過(guò)身份驗(yàn)證的同一數(shù)據(jù)庫(kù)中執(zhí)行此操作。
3、MongoDB角色use admin
db.logout()
正如您已經(jīng)知道的,角色是授予用戶(hù)對(duì)資源執(zhí)行操作的特權(quán)。角色定義角色成員可以執(zhí)行的任務(wù),以及可以執(zhí)行這些任務(wù)的資源。MongoDB為最常見(jiàn)的情景提供內(nèi)置角色。但是,也允許我們根據(jù)自己的特定需求創(chuàng)建自己的角色。每個(gè)角色的作用域都限定在創(chuàng)建它的數(shù)據(jù)庫(kù)中。角色只能包含應(yīng)用于其數(shù)據(jù)庫(kù)的特權(quán),并且只能從其數(shù)據(jù)庫(kù)中的其他角色繼承特權(quán)。在管理數(shù)據(jù)庫(kù)中創(chuàng)建的角色可以包含應(yīng)用于管理數(shù)據(jù)庫(kù)、其他數(shù)據(jù)庫(kù)或集群資源的特權(quán),還可以繼承其他數(shù)據(jù)庫(kù)和管理數(shù)據(jù)庫(kù)中的角色。因此,如果需要從另一個(gè)數(shù)據(jù)庫(kù)中創(chuàng)建的角色繼承,則必須在管理數(shù)據(jù)庫(kù)中創(chuàng)建新角色。
3.1 角色存儲(chǔ)在哪里?之前已經(jīng)解釋過(guò),您可以在管理數(shù)據(jù)庫(kù)或任何其他數(shù)據(jù)庫(kù)中創(chuàng)建角色。因此,如果你想檢查它們,你必須在定義它們的數(shù)據(jù)庫(kù)中進(jìn)行:
3.2 內(nèi)置的角色use "" 要獲取數(shù)據(jù)庫(kù)的所有角色,請(qǐng)使用db.system.roles.find()或者db.getRoles()
如果你只想要一個(gè)特定的角色,你可以使用這個(gè)命令:
use ""
db.getRole("")
MongoDB將內(nèi)置角色分類(lèi)為:
? 數(shù)據(jù)庫(kù)用戶(hù)角色
? 數(shù)據(jù)庫(kù)管理員角色
? 集群管理員角色
? 備份和恢復(fù)角色
? 所有數(shù)據(jù)庫(kù)角色
? 超級(jí)用戶(hù)角色
下面將詳細(xì)介紹每一個(gè)角色。
3.2.1 數(shù)據(jù)庫(kù)用戶(hù)角色數(shù)據(jù)庫(kù)級(jí)別角色如下:
? 讀——讀取所有非系統(tǒng)集合上的數(shù)據(jù)
? 讀寫(xiě)——包括所有“讀”角色特權(quán)和在所有非系統(tǒng)集合上寫(xiě)數(shù)據(jù)的能力
可以使用的數(shù)據(jù)庫(kù)管理員角色如下:
dbAdmin——授予執(zhí)行管理任務(wù)的特權(quán)
userAdmin——允許您在當(dāng)前數(shù)據(jù)庫(kù)上創(chuàng)建和修改用戶(hù)和角色
dbOwner——此角色結(jié)合了以下內(nèi)容:
readWrite
dbAdmin
userAdmin
用于管理整個(gè)系統(tǒng)的管理數(shù)據(jù)庫(kù)中的角色。
clusterMonitor——提供對(duì)監(jiān)視工具的只讀訪問(wèn)
clusterManager——用于管理和監(jiān)視集群上的操作
hostManager——監(jiān)視和管理服務(wù)器
clusterAdmin——結(jié)合了其他三個(gè)角色和dropDatabase操作
這個(gè)角色屬于管理數(shù)據(jù)庫(kù)。
backup——提供備份數(shù)據(jù)所需的特權(quán)
restore——提供從備份中還原數(shù)據(jù)所需的特權(quán)
這些角色位于管理數(shù)據(jù)庫(kù)上,并提供適用于所有數(shù)據(jù)庫(kù)的特權(quán)。
readAnyDatabase——與“read”角色相同,但適用于所有數(shù)據(jù)庫(kù)
readWriteAnyDatabase——與“readWrite”角色相同,但適用于所有數(shù)據(jù)庫(kù)
userAdminAnyDatabase——與‘userAdmin’角色相同,但適用于所有數(shù)據(jù)庫(kù)
dbAdminAnyDatabase——與“dbAdmin”角色相同,但適用于所有數(shù)據(jù)庫(kù)
以下角色不是直接的超級(jí)用戶(hù)角色,但是能夠?yàn)槿魏斡脩?hù)分配任何數(shù)據(jù)庫(kù)上的任何特權(quán),也包括他們自己。
userAdmin
dbOwner
userAdminAnyDatabase
root角色提供對(duì)所有資源的完全特權(quán):
root3.3 如何檢查角色的特權(quán)
如果需要知道角色的特權(quán)(是否從其他角色繼承),可以通過(guò) “showPrivileges”字段來(lái)進(jìn)行激活:
3.4 角色匯總use ""
db.getRole("", { showPrivileges : true })
管理MongoDB資產(chǎn)的人必須為自己的用例找到最合適的角色。在我看來(lái),以下角色通常是最有用的:
? userAdminAnyDatabase
? clusterManager
? clusterMonitor
? backup
? restore
? dbAdmin
? readWrite
? read
您可以在創(chuàng)建用戶(hù)時(shí)授予角色,也可以在事后授予角色。下一個(gè)命令對(duì)于在創(chuàng)建用戶(hù)的同時(shí)分配角色是有效的:
use ""
db.createUser(
{
user: "",
pwd: "",
roles: [ { role: "", db: " " } ]
})你也可以用這個(gè)命令:use ""
db.grantRolesToUser(
"",
[ { role : "", db : " " }, " ", … ]
)
注解:第三方MongoDB工具中的角色管理器之類(lèi)的功能在這里非常方便,特別是如果您還在學(xué)習(xí)MongoDB查詢(xún)語(yǔ)言的時(shí)候。
3.6 如何從用戶(hù)撤消角色3.7 自定義用戶(hù)角色 3.7.1 怎樣創(chuàng)建一個(gè)自定義角色use ""
db.revokeRolesFromUser(
"",
[ { role : "", db : " " } | " " ]
)
3.7.2 怎樣刪除一個(gè)自定義角色use ""
db.createRole({
role: "",
privileges: [
{ resource: { db : “”,
collection : “” },
actions: [ "" ]
}
],
roles: [ { role : "", db : " "} | " " ]
})
3.7.3 如何授予或撤消自定義角色use ""
db.dropRole("")
這些命令是給自定義用戶(hù)授予和撤銷(xiāo)角色:
方案一:
use ""
db.grantPrivilegesToRole(
"",
[
{ resource : { db : "", collection : " },
actions : [ "",... ]
},
...
]
)
方案二:
3.7.4 對(duì)自定義用戶(hù)角色怎樣授予和撤銷(xiāo)db.revokePrivilegesFromRole(
"",
[
{ resource : { db : "", collection : " },
actions : [ "",... ]
},
…
]
)
方案一:
use ""
db.grantRolesToRole(
"",
[ { role : "", db : " " } | ]
)
方案二:
3.8 怎樣更新一個(gè)角色db.revokeRolesFromRole(
"",
[ { role : "", db : " " } | ]
)
小心!正如文檔所述:“特權(quán)或角色數(shù)組的更新將完全替換前一個(gè)數(shù)組的值”。
use ""
db.updateRole(
"",
{
privileges : [
{
resource : { db : "", collection : " " },
actions : [ "" ]
},...
],
roles : [ { role : "", db : " " } | " " ]
}
)
注解:您剛剛完成了MongoDB用戶(hù)和角色解釋系列的前半部分,MongoDB用戶(hù)和角色解釋系列的后半部分將了解如何在一個(gè)包含三個(gè)數(shù)據(jù)的節(jié)點(diǎn)副本集中啟用訪問(wèn)控制,創(chuàng)建第一個(gè)使用localhost異常的用戶(hù),并授予所需的角色。敬請(qǐng)期待~~~
譯者:管祥青
湖南大學(xué)研究生畢業(yè),畢業(yè)后在海康威視研究院從事大數(shù)據(jù)研發(fā)及機(jī)器學(xué)習(xí)相關(guān)工作,現(xiàn)在就職于一家大數(shù)據(jù)金融公司。
原文作者:Juan Roy Couto
Juan為了讓自己成為目前MongoDB大師之一(https://www.mongodb.com/commu...。他獲得了MongoDB認(rèn)證,DBA和DEV。目前,他的工作角色是MongoDB數(shù)據(jù)庫(kù)工程師。在此之前,在多家金融公司做了20年的開(kāi)發(fā)。他喜歡與皇馬的馬克杯合作,也喜歡與技術(shù)社區(qū)交流。你可以在twitter.com/juanroycouto上閱讀他的文章。
原文鏈接:MongoDB Users and Roles Explained – Part 1
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/19584.html
摘要:與歐盟的通用數(shù)據(jù)保護(hù)規(guī)定的時(shí)間越來(lái)越近了。因此無(wú)論是否加入了歐盟,只要你正在以任何方式處理歐盟公民的數(shù)據(jù),就必須服從的條約。保留個(gè)人資料通過(guò)使用特定的生存時(shí)間索引,管理員可以自動(dòng)將數(shù)據(jù)庫(kù)中的歐盟公民數(shù)據(jù)過(guò)期。 ??與歐盟的通用數(shù)據(jù)保護(hù)規(guī)定的(GDPR)1時(shí)間越來(lái)越近了。從2018年5月25日起,任何一個(gè)未能滿(mǎn)足新法規(guī)的組織將面臨高達(dá)全球收入4%的罰款,或者是2000萬(wàn)歐元——無(wú)論哪種罰...
摘要:與歐盟的通用數(shù)據(jù)保護(hù)規(guī)定的時(shí)間越來(lái)越近了。因此無(wú)論是否加入了歐盟,只要你正在以任何方式處理歐盟公民的數(shù)據(jù),就必須服從的條約。保留個(gè)人資料通過(guò)使用特定的生存時(shí)間索引,管理員可以自動(dòng)將數(shù)據(jù)庫(kù)中的歐盟公民數(shù)據(jù)過(guò)期。 ??與歐盟的通用數(shù)據(jù)保護(hù)規(guī)定的(GDPR)1時(shí)間越來(lái)越近了。從2018年5月25日起,任何一個(gè)未能滿(mǎn)足新法規(guī)的組織將面臨高達(dá)全球收入4%的罰款,或者是2000萬(wàn)歐元——無(wú)論哪種罰...
閱讀 3373·2021-11-24 09:39
閱讀 3948·2021-11-22 09:34
閱讀 5011·2021-08-11 11:17
閱讀 1156·2019-08-29 13:58
閱讀 2656·2019-08-28 18:18
閱讀 615·2019-08-26 12:24
閱讀 904·2019-08-26 12:14
閱讀 824·2019-08-26 11:58