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