????要在MongoDB中對(duì)客戶端進(jìn)行身份驗(yàn)證,您必須將相應(yīng)的用戶添加到MongoDB。
????為了添加一個(gè)用戶,MongoDB提供了這個(gè)db.createUser()方法。添加用戶時(shí),可以將角色分配給用戶以授予權(quán)限。
在數(shù)據(jù)庫(kù)中創(chuàng)建的第一個(gè)用戶應(yīng)該是具有管理其他用戶權(quán)限的用戶管理員
? ??認(rèn)證數(shù)據(jù)庫(kù)用戶相關(guān)
????添加用戶時(shí),您可以在特定數(shù)據(jù)庫(kù)中創(chuàng)建用戶。這個(gè)數(shù)據(jù)庫(kù)是用戶的認(rèn)證數(shù)據(jù)庫(kù)。
????用戶可以擁有不同數(shù)據(jù)庫(kù)的權(quán)限;?
????也就是說(shuō),用戶的權(quán)限不限于其身份驗(yàn)證數(shù)據(jù)庫(kù)。
????通過分配給其他數(shù)據(jù)庫(kù)中的用戶角色,在一個(gè)數(shù)據(jù)庫(kù)中創(chuàng)建的用戶可以擁有對(duì)其他數(shù)據(jù)庫(kù)執(zhí)行操作的權(quán)限。
????用戶名和認(rèn)證數(shù)據(jù)庫(kù)充當(dāng)該用戶的唯一標(biāo)識(shí)符。
????也就是說(shuō),如果兩個(gè)用戶具有相同的名稱但是在不同的數(shù)據(jù)庫(kù)中創(chuàng)建,則它們是兩個(gè)單獨(dú)的用戶。
????如果您打算讓一個(gè)用戶擁有多個(gè)數(shù)據(jù)庫(kù)的權(quán)限,請(qǐng)?jiān)谶m用的數(shù)據(jù)庫(kù)中創(chuàng)建包含角色的單個(gè)用戶,而不是在不同的數(shù)據(jù)庫(kù)中多次創(chuàng)建用戶。
????集中用戶數(shù)據(jù)
? ??在版本2.6中更改。
????MongoDB將所有用戶信息(包括name,password和)存儲(chǔ)在?數(shù)據(jù)庫(kù)中的system.users集合中。user'sauthentication?databaseadmin
????請(qǐng)勿直接訪問此集合,而應(yīng)使用用戶管理命令。
????分片群集用戶
????要為分片群集創(chuàng)建用戶,請(qǐng)連接到mongos?實(shí)例并添加用戶。然后,客戶端通過mongos實(shí)例對(duì)這些用戶進(jìn)行身份驗(yàn)證?。
????碎片本地用戶
????然而,一些維護(hù)操作,如cleanupOrphaned,?compact,rs.reconfig(),需要分片集群特定的碎片直接連接。要執(zhí)行這些操作,您必須直接連接到分片并作為分片本地?管理用戶進(jìn)行身份驗(yàn)證。
????要?jiǎng)?chuàng)建分片本地管理用戶,請(qǐng)直接連接到分片并創(chuàng)建用戶。MongoDB將分片本地用戶存儲(chǔ)在分片admin?本身的數(shù)據(jù)庫(kù)中。
????這些分片本地用戶完全獨(dú)立于通過添加到分片群集的用戶mongos。碎片本地用戶是碎片的本地用戶,無(wú)法訪問mongos。
????直接連接到碎片應(yīng)該只用于特定于碎片的維護(hù)和配置。一般來(lái)說(shuō),客戶端應(yīng)該通過連接到分片群集mongos。
????本地主機(jī)異常
????本地主機(jī)例外允許您啟用訪問控制,然后在系統(tǒng)中創(chuàng)建第一個(gè)用戶。
????在本地主機(jī)例外情況下,啟用訪問控制后,連接到本地主機(jī)接口并在admin數(shù)據(jù)庫(kù)中創(chuàng)建第一個(gè)用戶。第一個(gè)用戶必須有權(quán)創(chuàng)建其他用戶,比如與用戶?userAdmin或userAdminAnyDatabase角色。
????版本3.4中更改:?MongoDB 3.4擴(kuò)展了localhost異常以允許執(zhí)行該?db.createRole()方法。此方法允許用戶通過LDAP授權(quán)在MongoDB內(nèi)創(chuàng)建映射到LDAP中定義的角色的角色。有關(guān)更多信息,請(qǐng)參閱LDAP授權(quán)。
????在版本3.0中更改:本地主機(jī)異常已更改,以便這些連接只能?訪問admin?數(shù)據(jù)庫(kù)上的第一個(gè)用戶。在以前的版本中,使用localhost異常獲得訪問權(quán)限的連接對(duì)MongoDB實(shí)例具有不受限制的訪問權(quán)限。
????localhost異常僅適用于在MongoDB實(shí)例中沒有創(chuàng)建用戶的情況。
????在分片群集的情況下,本地主機(jī)例外將單獨(dú)應(yīng)用于每個(gè)分片以及整個(gè)群集。一旦創(chuàng)建了分片群集并通過mongos實(shí)例添加用戶管理員,您仍然必須防止未經(jīng)授權(quán)訪問單個(gè)分片。按照以下步驟為集群中的每個(gè)分片進(jìn)行操作:
????????創(chuàng)建一個(gè)管理用戶,或者
????????啟動(dòng)時(shí)禁用localhost異常。要禁用本地主機(jī)例外,請(qǐng)將enableLocalhostAuthBypass參數(shù)設(shè)置為0。