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