對于各種數(shù)據(jù)庫軟件,啟用認(rèn)證的方法都不同,比如PG是在pg_hba.conf中對用戶設(shè)置使用啟用密碼認(rèn)證,而Oracle遠程登錄均需要使用密碼認(rèn)證。Mongodb是在參數(shù)中控制是否啟用密碼認(rèn)證,并且啟用后,對所有用戶生效,并不能像PG一樣對用戶區(qū)別對待。需要啟用認(rèn)證,使用mongod --auth或者在參數(shù)文件中加入authorization: enabled。mongodb的認(rèn)證分為用戶驗證(client auth)和集群間認(rèn)證(internal auth),在復(fù)制集中啟用認(rèn)證需指定keyFile參數(shù),指定后即默認(rèn)啟用了用戶驗證。
從3.0開始,mongodb默認(rèn)采用SCRAM加密算法,在3.0以前默認(rèn)使用MongoDB-CR算法,所以如果數(shù)據(jù)庫是從2.X版本升級上來的數(shù)據(jù)庫,可能出現(xiàn)認(rèn)證機制不兼容導(dǎo)致客戶端無法連接數(shù)據(jù)庫的情況。另外mongodb還支持x.509算法,主要用于加密連接中,本人也未使用過,此處不做探討。
——用戶創(chuàng)建
▼▼▼
use admin
db.createUser({user:"fhtest", pwd:"Ba@31^T2cy",roles:[{role:"read",db:"production"}]});
表示在production庫有read角色,可以看到roles值是一個數(shù)組,所以可以具有多個庫的多種角色或者一個庫的多種角色
——用戶授權(quán)
▼▼▼
db.grantRolesToUser( "ticket" , [ { role: "dbOwner", db: "pc_ticket" },{ role: "dbOwner", db: "pc_payment" } ]) ;
——權(quán)限回收
▼▼▼
db.revokeRolesFromUser( "ticket", [{role:"clusterMonitor",db:"admin"}] );
——用戶查詢
▼▼▼
db.getUsers();
內(nèi)置角色包括root、dbOwner、clusterAdmin、read、readWrite等,root角色相當(dāng)于PG的superuser超管權(quán)限。在生產(chǎn)環(huán)境中,會有給用戶授予所有數(shù)據(jù)庫讀權(quán)限的需求,類似oracle的select any table ,Mongodb中具有all database role,如readAnyDatabase、readWriteAnyDatabase等 ,詳細(xì)內(nèi)置role可查看官方文檔。
由于不能將對象權(quán)限授予用戶,所以當(dāng)要進行精細(xì)的權(quán)限控制,內(nèi)置角色無法滿足需求,就只能自定義角色。自定義角色里面可以直接對對象(resource)進行操作(action)的權(quán)限,也可以包含某個角色。如:
▼▼▼
use admin
db.createRole(
{
role: "myClusterwideAdmin",
privileges: [
{ resource: { cluster: true }, actions: [ "addShard" ] },
{ resource: { db: "config", collection: "" }, actions: [ "find", "update", "insert", "remove" ] },
{ resource: { db: "users", collection: "usersCollection" }, actions: [ "update", "insert", "remove" ] },
{ resource: { db: "", collection: "" }, actions: [ "find" ] }
],
roles: [
{ role: "read", db: "admin" }
]
},
{ w: "majority" , wtimeout: 5000 }
)
當(dāng)然也可以將role授權(quán)給role,使用db.grantRolesToRole() 。
在生產(chǎn)環(huán)境中若,經(jīng)常需要在mongo上執(zhí)行javascript腳本,并且使用db.eval()調(diào)用javascript腳本,則可能出現(xiàn)如下報錯,提示無權(quán)限
eval需要所有資源的所有權(quán)限,需創(chuàng)建如下角色并授予用戶
▼▼▼
db.createRole(
{
role: "eval_role",
privileges: [
{ resource: { anyResource: true }, actions: [ "anyAction" ] }
],
roles:[]
}
)
在此,強烈不建議授予此類權(quán)限!調(diào)用javascript可以使用其他方案,比如load 。
相關(guān)閱讀
更多精彩干貨分享
點擊下方名片關(guān)注
IT那活兒
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/129932.html
摘要:可選,拋出異常的級別。示例教程更新一條數(shù)據(jù)標(biāo)題。命令行下執(zhí)行進入數(shù)據(jù)庫進入庫可查看當(dāng)前庫用戶列表執(zhí)行新建用戶設(shè)置賬戶密碼,并指定級別。重啟服務(wù)重新進入數(shù)據(jù)庫,發(fā)現(xiàn)命令無法執(zhí)行,報權(quán)限不足錯誤。命令可以正常執(zhí)行。 1.MongoDB 簡介 MongoDB 是由C++語言編寫的,是一個基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng)。在高負(fù)載的情況下,添加更多的節(jié)點,可以保證服務(wù)器性能。MongoDB ...
摘要:可選,拋出異常的級別。示例教程更新一條數(shù)據(jù)標(biāo)題。命令行下執(zhí)行進入數(shù)據(jù)庫進入庫可查看當(dāng)前庫用戶列表執(zhí)行新建用戶設(shè)置賬戶密碼,并指定級別。重啟服務(wù)重新進入數(shù)據(jù)庫,發(fā)現(xiàn)命令無法執(zhí)行,報權(quán)限不足錯誤。命令可以正常執(zhí)行。 1.MongoDB 簡介 MongoDB 是由C++語言編寫的,是一個基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng)。在高負(fù)載的情況下,添加更多的節(jié)點,可以保證服務(wù)器性能。MongoDB ...
摘要:默認(rèn)是不開啟權(quán)限認(rèn)證的,而我也是一直這么做的。自從上次爆發(fā)了贖金門事件,必須重視下的權(quán)限認(rèn)證了。開啟認(rèn)證也很簡單,在配置文件默認(rèn)是里面加入這樣一行就行了。 MongoDB version: v3.4.4 MongoDB默認(rèn)是不開啟權(quán)限認(rèn)證的,而我也是一直這么做的。自從上次MongoDB爆發(fā)了贖金門事件,必須重視下MongoDB的權(quán)限認(rèn)證了。 開啟認(rèn)證也很簡單,在配置文件(默認(rèn)是/etc...
摘要:一下安裝數(shù)據(jù)庫進入官網(wǎng),選擇相應(yīng)的版本下載,安裝時默認(rèn)勾選安裝服務(wù)和修改一些數(shù)據(jù)庫配置,如已有數(shù)據(jù)庫連接工具,可取消默認(rèn)勾選的安裝。 一、Win下安裝數(shù)據(jù)庫 進入mongo官網(wǎng),選擇相應(yīng)的msi版本下載,安裝時默認(rèn)勾選安裝MongoD服務(wù)和修改一些數(shù)據(jù)庫配置,如已有數(shù)據(jù)庫連接工具Robo 3T,可取消默認(rèn)勾選的compass安裝。 若啟動服務(wù)報mp錯誤,可修改binmongod.cfg...
閱讀 1346·2023-01-11 13:20
閱讀 1684·2023-01-11 13:20
閱讀 1132·2023-01-11 13:20
閱讀 1860·2023-01-11 13:20
閱讀 4100·2023-01-11 13:20
閱讀 2704·2023-01-11 13:20
閱讀 1385·2023-01-11 13:20
閱讀 3597·2023-01-11 13:20