最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于Mongodb 認(rèn)證鑒權(quán)你需要知道的一些事

 更新時(shí)間:2017年10月22日 09:30:52   作者:zale.tang  
最近因?yàn)閙ongodb被黑了,早先我就疑惑過(guò)怎么這東西開(kāi)啟服務(wù)就能用了,后來(lái)找了各方資料,知道MongoDB默認(rèn)是沒(méi)有鑒權(quán)的,所以這篇文章主要給大家介紹了關(guān)于Mongodb認(rèn)證鑒權(quán)你需要知道的一些事,需要的朋友可以參考下。

前言

本文主要給大家介紹了Mongodb認(rèn)證鑒權(quán)的一些相關(guān)內(nèi)容,通過(guò)設(shè)置認(rèn)證鑒權(quán)會(huì)對(duì)大家的mongodb安全進(jìn)一步的保障,下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。

一、Mongodb 的權(quán)限管理

認(rèn)識(shí)權(quán)限管理,說(shuō)明主要概念及關(guān)系

與大多數(shù)數(shù)據(jù)庫(kù)一樣,Mongodb同樣提供了一套權(quán)限管理機(jī)制。 為了體驗(yàn)Mongodb 的權(quán)限管理,我們找一臺(tái)已經(jīng)安裝好的Mongodb,可以參照這里搭建一個(gè)單節(jié)點(diǎn)的Mongodb。

直接打開(kāi)mongo shell:

./bin/mongo --port=27017

嘗試執(zhí)行stats命令以查看appdb數(shù)據(jù)庫(kù)的狀態(tài):

MongoDB Enterprise > use appdb
MongoDB Enterprise > db.stats()
{
 "ok" : 0,
 "errmsg" : "not authorized on nscl to execute command { dbstats: 1.0, scale: undefined }",
 "code" : 13
}

此時(shí)的提示正是說(shuō)明你當(dāng)前的操作沒(méi)有獲得許可,使用appdb預(yù)創(chuàng)建的用戶進(jìn)行鑒權(quán):

> db.auth('appuser','yourpassword')
1
> db.stats()
{
 "db" : "appdb",
 "collections" : 0,
 "views" : 0,
 "objects" : 0,
 "avgObjSize" : 0,
 "dataSize" : 0,
 "storageSize" : 0,
 "numExtents" : 0,
 "indexes" : 0,
 "indexSize" : 0,
 "fileSize" : 0,
 "ok" : 1
}

可以發(fā)現(xiàn),在通過(guò)驗(yàn)明身份之后,stats操作的鑒權(quán)獲得了許可。

以上例子可能讓你對(duì)數(shù)據(jù)庫(kù)鑒權(quán)有了點(diǎn)淺顯認(rèn)識(shí),那么接下來(lái)開(kāi)始說(shuō)點(diǎn)概念了,大致是叫基于角色的權(quán)限控制

 

[圖-角色權(quán)限控制]

先解釋下圖中的幾個(gè)實(shí)體:

  • Resource,資源 一個(gè)資源可以是一個(gè)數(shù)據(jù)庫(kù)、集合、或者一個(gè)集群..往大了說(shuō),任何可能被操作的事物都可以被當(dāng)做資源。
  • Action,動(dòng)作 動(dòng)作是指對(duì)資源的一個(gè)執(zhí)行行為,比如讀取表、讀取數(shù)據(jù)庫(kù),其中讀取便是一個(gè)動(dòng)作。
  • Privilege,權(quán)限 權(quán)限指的是對(duì)某類或某一些資源執(zhí)行某些動(dòng)作的允許,與Permission的意義一致。
  • Role,角色 系統(tǒng)中的角色,通常是代表了一種權(quán)力等級(jí)的象征,比如論壇中的管理員、版主、游客等等,就是角色; 系統(tǒng)定義中,角色往往代表一組權(quán)限的集合。
  • User,用戶 可登錄系統(tǒng)的實(shí)體,一個(gè)用戶通常可被賦予多個(gè)角色。

噢,關(guān)于圖的簡(jiǎn)單解釋: 權(quán)限定義了對(duì)某些資源的某些操作,角色則可以擁有多個(gè)權(quán)限; 用戶User可以被賦予多個(gè)角色,從而獲得這些角色所擁有的權(quán)限以操作某些資源

對(duì)于Mongodb來(lái)說(shuō),只要開(kāi)啟鑒權(quán),所有的DB訪問(wèn)操作都需要通過(guò)權(quán)限檢查。而大致的操作流程跟下圖類似

 

[圖-mongo鑒權(quán)]

Mongodb 的用戶歸屬于某個(gè)數(shù)據(jù)庫(kù),用戶需要在所屬的數(shù)據(jù)庫(kù)中進(jìn)行鑒權(quán);
一旦通過(guò)鑒權(quán),當(dāng)前的會(huì)話(連接)中所有操作將按照用戶被賦予的角色權(quán)限執(zhí)行檢查。

二、鑒權(quán)方式

闡述Mongodb支持的幾種鑒權(quán)方式 鑒權(quán)方式是指Mongodb如何識(shí)別接入用戶,如何檢查權(quán)限是否合法的一系列校驗(yàn)機(jī)制。

  • SCRAM-SHA-1 SCRAM-SHA-1 是默認(rèn)的鑒權(quán)機(jī)制,定義于 IETF standard, RFC 5802 是一種安全性較高的"挑戰(zhàn)-應(yīng)答"鑒權(quán)機(jī)制。關(guān)于"挑戰(zhàn)-應(yīng)答"可以參考維基百科
  • MongoDB Challenge and Response (MONGODB-CR) 3.0 以前采用的機(jī)制,已經(jīng)廢棄
  • x.509 Certificate Authentication. 基于證書(shū)的鑒權(quán),采用該方式可建立 SSL/TLS 加密連接
  • LDAP proxy authentication 基于LDAP 系統(tǒng)的鑒權(quán),僅企業(yè)版支持
  • Kerberos authentication 基于Kerberos 的鑒權(quán),僅企業(yè)版支持

SCRAM-SHA-1 是當(dāng)前推薦使用的鑒權(quán)方式,既然如此,有必要上圖繼續(xù)解釋:


步驟解讀

  1. 客戶端發(fā)起一個(gè)SCRAM鑒權(quán)請(qǐng)求; 鑒權(quán)參數(shù)中帶上用戶名、客戶端隨機(jī)字符串(防止重放攻擊);
  2. 服務(wù)端發(fā)出一個(gè)挑戰(zhàn)響應(yīng); 服務(wù)側(cè)先檢查用戶名,通過(guò)后生成一個(gè)salt因子、迭代數(shù)、合并字符串(包含客戶端隨機(jī)串和服務(wù)端隨機(jī)串)
  3. 客戶端響應(yīng)一個(gè)proof(證明數(shù)據(jù))和合并字符串; 響應(yīng)的 proof數(shù)據(jù)根據(jù)服務(wù)所給的隨機(jī)參數(shù)以及客戶端密鑰生成,是一個(gè)客戶端簽名與密鑰異或計(jì)算后的結(jié)果;
  4. 服務(wù)端將存儲(chǔ)的密鑰結(jié)合隨機(jī)參數(shù),使用同樣的算法生成簽名并校驗(yàn)客戶端 proof數(shù)據(jù); 若校驗(yàn)通過(guò),服務(wù)端采用類似方式發(fā)送自己的簽名;
  5. 客戶端校驗(yàn)服務(wù)端簽名數(shù)據(jù)。

可以看到,SCRAM鑒權(quán)時(shí)也類似SSL/TLS 的握手過(guò)程,但相比之下簡(jiǎn)單許多,同時(shí)在性能方面也要具備優(yōu)勢(shì); 然后我們看看安全性的部分:

  • 信息竊聽(tīng),傳輸過(guò)程中全部采用動(dòng)態(tài)簽名,保證密碼不會(huì)被傳輸;
  • 重放攻擊,由于使用了隨機(jī)數(shù),每次生成的數(shù)據(jù)都不一樣,可避免重復(fù)數(shù)據(jù)攻擊;
  • 服務(wù)假冒,鑒權(quán)過(guò)程是雙向的,即客戶端會(huì)校驗(yàn)服務(wù)端身份,而服務(wù)端密鑰也根據(jù)密碼生成,中間人無(wú)法仿造;
  • 存儲(chǔ)安全,密碼在數(shù)據(jù)庫(kù)中均沒(méi)有明文存儲(chǔ),都通過(guò)不可逆的算法加密存儲(chǔ)。

另外SCRAM-SHA-1 相比MONGODB-CR的優(yōu)勢(shì)還有:

A tunable work factor (iterationCount), 可靈活調(diào)整的安全系數(shù) Per-user random salts rather than server-wide salts 每個(gè)用戶有獨(dú)立的隨機(jī)系數(shù) A cryptographically stronger hash function (SHA-1 rather than MD5), 更安全的hash函數(shù) Authentication of the server to the client as well as the client to the server. 支持雙向認(rèn)證

對(duì) SCRAM-SHA-1的實(shí)現(xiàn)感興趣?戳這里

三、內(nèi)部鑒權(quán)

副本集、分片集群內(nèi)鑒權(quán)方式

內(nèi)部鑒權(quán)是指 Mongo集群內(nèi)部節(jié)點(diǎn)之間進(jìn)行訪問(wèn)的鑒權(quán)方式,比如副本集內(nèi)主備之間的訪問(wèn)、分片集群內(nèi)Mongos 與Mongod之間的訪問(wèn)。 內(nèi)部鑒權(quán)目前支持兩種方式:

  • KeyFiles 密鑰文件方式,采用SCAM-SHA-1 的鑒權(quán)機(jī)制,文件內(nèi)包含了一個(gè)共享密鑰,由集群內(nèi)所有成員共同持有。 通常,密鑰的長(zhǎng)度在6-1024字符內(nèi),采用Base64編碼。如何使用?
  • X.509 證書(shū) 證書(shū)鑒權(quán),用于SSL/TLS加密連接通道。 如何使用?

四、數(shù)據(jù)庫(kù)角色

針對(duì)Mongodb數(shù)據(jù)庫(kù)中的各種角色進(jìn)行說(shuō)明

數(shù)據(jù)庫(kù)訪問(wèn)

角色名稱 擁有權(quán)限
read 允許讀取指定數(shù)據(jù)庫(kù)的角色
readWrite 允許讀寫(xiě)指定數(shù)據(jù)庫(kù)的角色

數(shù)據(jù)庫(kù)管理

角色名稱 擁有權(quán)限
dbAdmin 允許用戶在指定數(shù)據(jù)庫(kù)中執(zhí)行管理函數(shù),如索引創(chuàng)建、刪除,查看統(tǒng)計(jì)或訪問(wèn)system.profile
userAdmin 允許管理當(dāng)前數(shù)據(jù)庫(kù)的用戶,如創(chuàng)建用戶、為用戶授權(quán)
dbOwner 數(shù)據(jù)庫(kù)擁有者(最高),集合了dbAdmin/userAdmin/readWrite角色權(quán)限

集群管理

角色名稱 擁有權(quán)限
clusterAdmin 集群最高管理員,集合clusterManager/clusterMonitor/hostManager角色權(quán)限
clusterManager 集群管理角色,允許對(duì)分片和副本集集群執(zhí)行管理操作,如addShard,resync等
clusterMonitor 集群監(jiān)控角色,允許對(duì)分片和副本集集群進(jìn)行監(jiān)控,如查看serverStatus
hostManager 節(jié)點(diǎn)管理角色,允許監(jiān)控和管理節(jié)點(diǎn),比如killOp、shutdown操作

備份恢復(fù)

角色名稱 擁有權(quán)限
backup 備份權(quán)限,允許執(zhí)行mongodump操作
restore 恢復(fù)權(quán)限,允許執(zhí)行mongoresotre操作

數(shù)據(jù)庫(kù)通用角色

角色名稱 擁有權(quán)限
readAnyDatabase 允許讀取所有數(shù)據(jù)庫(kù)
readWriteAnyDatabase 允許讀寫(xiě)所有數(shù)據(jù)庫(kù)
userAdminAnyDatabase 允許管理所有數(shù)據(jù)庫(kù)的用戶
dbAdminAnyDatabase 允許管理所有數(shù)據(jù)庫(kù)

特殊角色

角色名稱 擁有權(quán)限
root 超級(jí)管理員,擁有所有權(quán)限
__system 內(nèi)部角色,用于集群間節(jié)點(diǎn)通訊

基本是這些,有興趣可看看官方的內(nèi)置角色 Mongodb 的用戶及角色數(shù)據(jù)一般位于當(dāng)前實(shí)例的 admin數(shù)據(jù)庫(kù),system.users存放了所有數(shù)據(jù); 存在例外的情況是分片集群,應(yīng)用接入mongos節(jié)點(diǎn),鑒權(quán)數(shù)據(jù)則存放于config節(jié)點(diǎn)。因此有時(shí)候?yàn)榱朔奖惴制汗芾?,?huì)單獨(dú)為分片內(nèi)部節(jié)點(diǎn)創(chuàng)建獨(dú)立的管理操作用戶;

五、相關(guān)操作

簡(jiǎn)單列舉用戶權(quán)限相關(guān)的常用操作

授權(quán)啟動(dòng)

./bin/mongod --auth

默認(rèn)為非授權(quán)啟動(dòng) 也可以通過(guò)security.authorization配置指定

創(chuàng)建管理員用戶

use admin
db.createUser({
 user:'admin',pwd:'admin@2016',roles:[
 {role:'clusterAdmin',db:'admin'},
 {role:'userAdminAnyDatabase',db:'admin'}
 ]})

創(chuàng)建用戶

use appdb
db.createUser({user:'appuser',pwd:'appuser@2016'})

授予權(quán)限

use appdb
db.grantRolesToUser("appuser", [{role:'readWrite',db:'appdb'}])

刪除權(quán)限

use appdb
db.revokeRolesFromUser("appuser",[{ role: "read", db: "appdb" }])

更多操作

六、常見(jiàn)問(wèn)題

shell 操作提示錯(cuò)誤

use appdb
MongoDB Enterprise > db.stats()
{
 "ok" : 0,
 "errmsg" : "not authorized on appdb to execute command { dbstats: 1.0, scale: undefined }",
 "code" : 13
}

原因:當(dāng)前連接未鑒權(quán)或用戶沒(méi)有操作權(quán)限 解決:為用戶分配適當(dāng)權(quán)限,并執(zhí)行auth操作,如下:

db.auth('appuser','yourpassword');

無(wú)法執(zhí)行 eval 操作

db.eval() 是一個(gè)全局操作,可執(zhí)行任意數(shù)據(jù)庫(kù)腳本; 執(zhí)行該命令需要擁有anyAction或anyResource的權(quán)限,通常不建議為數(shù)據(jù)庫(kù)用戶賦予這樣的權(quán)限。 該命令存在安全風(fēng)險(xiǎn),已不建議使用(mongodb 3.0之后已經(jīng)過(guò)期)。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,本文還有許多不足,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

擴(kuò)展閱讀

Mongodb 鑒權(quán)機(jī)制 https://docs.mongodb.com/manual/core/authentication/

Mongodb 內(nèi)置角色介紹 https://docs.mongodb.com/manual/reference/built-in-roles/#database-user-roles

Mongodb 權(quán)限操作介紹 https://docs.mongodb.com/manual/reference/privilege-actions/#security-user-actions

運(yùn)維-Mongodb鑒權(quán)介紹 http://www.ywnds.com/?p=5635

相關(guān)文章

  • MongoDB中的Primary Shard詳解

    MongoDB中的Primary Shard詳解

    在MongoDB的Sharding架構(gòu)中,每個(gè)database中都可以存儲(chǔ)兩種類型的集合,一種是未分片的集合,一種是通過(guò)分片鍵,被打散的集合,下面給大家介紹MongoDB中的Primary Shard詳解,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • Mongo Shell 執(zhí)行環(huán)境的基本操作

    Mongo Shell 執(zhí)行環(huán)境的基本操作

    Mongo Shell 是 MongoDB 的交互式 JavaScript shell,用于與 MongoDB 數(shù)據(jù)庫(kù)進(jìn)行交互,這篇文章主要介紹了Mongo Shell 執(zhí)行環(huán)境,需要的朋友可以參考下
    2025-02-02
  • mongodb命令行連接及基礎(chǔ)命令總結(jié)大全

    mongodb命令行連接及基礎(chǔ)命令總結(jié)大全

    大家可能平時(shí)在開(kāi)發(fā)過(guò)程中都使用客戶端工具來(lái)連接和查詢mongodb,但是一般生產(chǎn)當(dāng)中的數(shù)據(jù)庫(kù)是不允許本地客戶端連接的,下面這篇文章主要給大家介紹了關(guān)于mongodb命令行連接及基礎(chǔ)命令總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2024-04-04
  • 淺析MongoDB之安全認(rèn)證

    淺析MongoDB之安全認(rèn)證

    MongoDB是基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù)。由C++語(yǔ)言編寫(xiě)。旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。默認(rèn)情況下,MongoDB實(shí)例啟動(dòng)運(yùn)行時(shí)是沒(méi)有啟用用戶訪問(wèn)權(quán)限控制的,在實(shí)例本機(jī)服務(wù)器上都可以隨意連接到實(shí)例進(jìn)行各種操作,MongoDB不會(huì)對(duì)連接客戶端進(jìn)行用戶驗(yàn)證
    2021-06-06
  • MongoDB運(yùn)行狀態(tài)監(jiān)控、性能分析工具mongostat詳解

    MongoDB運(yùn)行狀態(tài)監(jiān)控、性能分析工具mongostat詳解

    這篇文章主要介紹了MongoDB運(yùn)行狀態(tài)監(jiān)控、性能分析工具mongostat詳解,mongostat是mongdb自帶的狀態(tài)檢測(cè)工具,在命令行下使用,它會(huì)間隔固定時(shí)間獲取mongodb的當(dāng)前運(yùn)行狀態(tài),并輸出,本文詳細(xì)講解了它的使用,需要的朋友可以參考下
    2015-07-07
  • 詳解MongoDB的條件查詢和排序

    詳解MongoDB的條件查詢和排序

    MongoDB 提供了豐富的查詢功能,包括條件組合、反向查詢、查詢結(jié)果過(guò)濾、排序等,借助 MongoDB 多樣化的查詢方式,可以完成業(yè)務(wù)上的各類查詢需要。
    2021-06-06
  • mongodb+php實(shí)現(xiàn)簡(jiǎn)單的增刪改查

    mongodb+php實(shí)現(xiàn)簡(jiǎn)單的增刪改查

    這篇文章主要介紹了mongodb+php實(shí)現(xiàn)簡(jiǎn)單的增刪改查的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • MongoDB中如何使用JOIN操作詳解

    MongoDB中如何使用JOIN操作詳解

    相信大家都知道m(xù)ongodb是不支持join操作的,因此我們只能自己來(lái)實(shí)現(xiàn)這個(gè)功能。所以下面這篇文章主要給大家介紹了關(guān)于在MongoDB中如何使用JOIN操作的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面來(lái)一起看看吧。
    2017-07-07
  • MongoDB索引使用詳解

    MongoDB索引使用詳解

    索引,使用索引可快速訪問(wèn)數(shù)據(jù)庫(kù)表中的特定信息。索引是對(duì)數(shù)據(jù)庫(kù)表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu),例如 employee 表的姓名(name)列。如果要按姓查找特定職員,與必須搜索表中的所有行相比,索引會(huì)幫助您更快地獲得該信息。
    2016-01-01
  • Windows下MongoDB的下載安裝、環(huán)境配置教程圖解

    Windows下MongoDB的下載安裝、環(huán)境配置教程圖解

    這篇文章主要介紹了Windows下MongoDB的下載安裝、環(huán)境配置教程詳解,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-06-06

最新評(píng)論

镇平县| 韩城市| 博罗县| 曲阜市| 苍梧县| 滦南县| 平潭县| 陆河县| 汕尾市| 亳州市| 凉城县| 额敏县| 治多县| 遵义市| 紫阳县| 汕头市| 屏南县| 贡山| 额济纳旗| 志丹县| 赤水市| 尉氏县| 游戏| 岑溪市| 镇康县| 遵义市| 日土县| 南陵县| 鸡西市| 肃北| 沙湾县| 洱源县| 巩义市| 凤凰县| 宜城市| 花垣县| 麟游县| 元阳县| 休宁县| 蒙自县| 涟水县|