国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Mongodb的認證及權限管理

IT那活兒 / 3252人閱讀
Mongodb的認證及權限管理

對于各種數據庫軟件,啟用認證的方法都不同,比如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算法,主要用于加密連接中,本人也未使用過,此處不做探討。


一. 用戶創建及管理

在Mongodb中的用戶是基于數據庫的,不同數據庫中可以存在同名用戶,所以在登錄數據庫的時候,需要指定mongo --authenticationDatabase=XX 參數選擇認證數據庫。在生產中,為了規范和便于管理,我們建議將所有用戶都創建在admin庫中。需要注意的是Mongodb默認是沒有創建任何內置用戶的,所以在數據庫實例啟用認證前,需要先創建一個超管賬號,然后再重啟實例啟用認證。

——用戶創建

use admin
db.createUser({user:"fhtest", pwd:"Ba@31^T2cy",roles:[{role:"read",db:"production"}]});
{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();


二.  角色管理

從上面用戶管理的命令可以看到,不管是授權還是回收權限,都是基于角色的,Mongodb不能直接將某個集合或者數據庫的操作權限授予用戶,只能通過role來進行授權,role可以是系統內置的,也可以是用戶自定義的。

內置角色包括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 }
)
從上面的例子可以看出resource是一個子文檔,包含db和collection,如果為空則表示所有對象,action是一個數組,包含需要授予的操作權限。

當然也可以將role授權給role,使用db.grantRolesToRole() 。

在生產環境中若,經常需要在mongo上執行javascript腳本,并且使用db.eval()調用javascript腳本,則可能出現如下報錯,提示無權限

eval需要所有資源的所有權限,需創建如下角色并授予用戶

db.createRole(
   {
     role: "eval_role",
     privileges: [
       { resource: { anyResource: true }, actions: [ "anyAction" ] }
     ],
   roles:[]
   }
)

在此,強烈不建議授予此類權限!調用javascript可以使用其他方案,比如load 。


相關閱讀



以文本形式將MySql數據遷移Mongodb的方法

Mongodb聚合查詢及在日常運維中的使用

Mongodb日常性能問題處理案例分享

Mongodb增量備份和基于時間點恢復

Mongodb升級方案概述


END


更多精彩干貨分享

點擊下方名片關注

IT那活兒

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/129932.html

相關文章

  • MongoDB 入門教程

    摘要:可選,拋出異常的級別。示例教程更新一條數據標題。命令行下執行進入數據庫進入庫可查看當前庫用戶列表執行新建用戶設置賬戶密碼,并指定級別。重啟服務重新進入數據庫,發現命令無法執行,報權限不足錯誤。命令可以正常執行。 1.MongoDB 簡介 MongoDB 是由C++語言編寫的,是一個基于分布式文件存儲的開源數據庫系統。在高負載的情況下,添加更多的節點,可以保證服務器性能。MongoDB ...

    Vicky 評論0 收藏0
  • MongoDB 入門教程

    摘要:可選,拋出異常的級別。示例教程更新一條數據標題。命令行下執行進入數據庫進入庫可查看當前庫用戶列表執行新建用戶設置賬戶密碼,并指定級別。重啟服務重新進入數據庫,發現命令無法執行,報權限不足錯誤。命令可以正常執行。 1.MongoDB 簡介 MongoDB 是由C++語言編寫的,是一個基于分布式文件存儲的開源數據庫系統。在高負載的情況下,添加更多的節點,可以保證服務器性能。MongoDB ...

    zhonghanwen 評論0 收藏0
  • MongoDB開啟權限認證

    摘要:默認是不開啟權限認證的,而我也是一直這么做的。自從上次爆發了贖金門事件,必須重視下的權限認證了。開啟認證也很簡單,在配置文件默認是里面加入這樣一行就行了。 MongoDB version: v3.4.4 MongoDB默認是不開啟權限認證的,而我也是一直這么做的。自從上次MongoDB爆發了贖金門事件,必須重視下MongoDB的權限認證了。 開啟認證也很簡單,在配置文件(默認是/etc...

    30e8336b8229 評論0 收藏0
  • mongoDB安裝與操作

    摘要:一下安裝數據庫進入官網,選擇相應的版本下載,安裝時默認勾選安裝服務和修改一些數據庫配置,如已有數據庫連接工具,可取消默認勾選的安裝。 一、Win下安裝數據庫 進入mongo官網,選擇相應的msi版本下載,安裝時默認勾選安裝MongoD服務和修改一些數據庫配置,如已有數據庫連接工具Robo 3T,可取消默認勾選的compass安裝。 若啟動服務報mp錯誤,可修改binmongod.cfg...

    zorpan 評論0 收藏0

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<