真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

Mongodb中怎么實現(xiàn)認證鑒權-創(chuàng)新互聯(lián)

本篇文章給大家分享的是有關Mongodb中怎么實現(xiàn)認證鑒權,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

成都創(chuàng)新互聯(lián)專注于萬年企業(yè)網站建設,成都響應式網站建設公司,電子商務商城網站建設。萬年網站建設公司,為萬年等地區(qū)提供建站服務。全流程按需網站制作,專業(yè)設計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務

一、Mongodb 的權限管理

認識權限管理,說明主要概念及關系

與大多數(shù)數(shù)據(jù)庫一樣,Mongodb同樣提供了一套權限管理機制。 為了體驗Mongodb 的權限管理,我們找一臺已經安裝好的Mongodb,可以參照這里搭建一個單節(jié)點的Mongodb。

直接打開mongo shell:

./bin/mongo --port=27017

嘗試執(zhí)行stats命令以查看appdb數(shù)據(jù)庫的狀態(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
}

此時的提示正是說明你當前的操作沒有獲得許可,使用appdb預創(chuàng)建的用戶進行鑒權:

> 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),在通過驗明身份之后,stats操作的鑒權獲得了許可。

以上例子可能讓你對數(shù)據(jù)庫鑒權有了點淺顯認識,那么接下來開始說點概念了,大致是叫基于角色的權限控制

Mongodb中怎么實現(xiàn)認證鑒權

[圖-角色權限控制]

先解釋下圖中的幾個實體:

  • Resource,資源 一個資源可以是一個數(shù)據(jù)庫、集合、或者一個集群..往大了說,任何可能被操作的事物都可以被當做資源。

  • Action,動作 動作是指對資源的一個執(zhí)行行為,比如讀取表、讀取數(shù)據(jù)庫,其中讀取便是一個動作。

  • Privilege,權限 權限指的是對某類或某一些資源執(zhí)行某些動作的允許,與Permission的意義一致。

  • Role,角色 系統(tǒng)中的角色,通常是代表了一種權力等級的象征,比如論壇中的管理員、版主、游客等等,就是角色; 系統(tǒng)定義中,角色往往代表一組權限的集合。

  • User,用戶 可登錄系統(tǒng)的實體,一個用戶通??杀毁x予多個角色。

噢,關于圖的簡單解釋: 權限定義了對某些資源的某些操作,角色則可以擁有多個權限; 用戶User可以被賦予多個角色,從而獲得這些角色所擁有的權限以操作某些資源。

對于Mongodb來說,只要開啟鑒權,所有的DB訪問操作都需要通過權限檢查。而大致的操作流程跟下圖類似

 Mongodb中怎么實現(xiàn)認證鑒權

[圖-mongo鑒權]

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

二、鑒權方式

闡述Mongodb支持的幾種鑒權方式 鑒權方式是指Mongodb如何識別接入用戶,如何檢查權限是否合法的一系列校驗機制。

  • SCRAM-SHA-1 SCRAM-SHA-1 是默認的鑒權機制,定義于 IETF standard, RFC 5802 是一種安全性較高的"挑戰(zhàn)-應答"鑒權機制。關于"挑戰(zhàn)-應答"可以參考維基百科

  • MongoDB Challenge and Response (MONGODB-CR) 3.0 以前采用的機制,已經廢棄

  • x.509 Certificate Authentication. 基于證書的鑒權,采用該方式可建立 SSL/TLS 加密連接

  • LDAP proxy authentication 基于LDAP 系統(tǒng)的鑒權,僅企業(yè)版支持

  • Kerberos authentication 基于Kerberos 的鑒權,僅企業(yè)版支持

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

Mongodb中怎么實現(xiàn)認證鑒權

步驟解讀

  1. 客戶端發(fā)起一個SCRAM鑒權請求; 鑒權參數(shù)中帶上用戶名、客戶端隨機字符串(防止重放攻擊);

  2. 服務端發(fā)出一個挑戰(zhàn)響應; 服務側先檢查用戶名,通過后生成一個salt因子、迭代數(shù)、合并字符串(包含客戶端隨機串和服務端隨機串)

  3. 客戶端響應一個proof(證明數(shù)據(jù))和合并字符串; 響應的 proof數(shù)據(jù)根據(jù)服務所給的隨機參數(shù)以及客戶端密鑰生成,是一個客戶端簽名與密鑰異或計算后的結果;

  4. 服務端將存儲的密鑰結合隨機參數(shù),使用同樣的算法生成簽名并校驗客戶端 proof數(shù)據(jù); 若校驗通過,服務端采用類似方式發(fā)送自己的簽名;

  5. 客戶端校驗服務端簽名數(shù)據(jù)。

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

  • 信息竊聽,傳輸過程中全部采用動態(tài)簽名,保證密碼不會被傳輸;

  • 重放攻擊,由于使用了隨機數(shù),每次生成的數(shù)據(jù)都不一樣,可避免重復數(shù)據(jù)攻擊;

  • 服務假冒,鑒權過程是雙向的,即客戶端會校驗服務端身份,而服務端密鑰也根據(jù)密碼生成,中間人無法仿造;

  • 存儲安全,密碼在數(shù)據(jù)庫中均沒有明文存儲,都通過不可逆的算法加密存儲。

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

A tunable work factor (iterationCount), 可靈活調整的安全系數(shù) Per-user random salts rather than server-wide salts 每個用戶有獨立的隨機系數(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. 支持雙向認證

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

三、內部鑒權

副本集、分片集群內鑒權方式

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

  • KeyFiles 密鑰文件方式,采用SCAM-SHA-1 的鑒權機制,文件內包含了一個共享密鑰,由集群內所有成員共同持有。 通常,密鑰的長度在6-1024字符內,采用Base64編碼。如何使用?

  • X.509 證書 證書鑒權,用于SSL/TLS加密連接通道。 如何使用?

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

針對Mongodb數(shù)據(jù)庫中的各種角色進行說明

數(shù)據(jù)庫訪問

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

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

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

集群管理

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

備份恢復

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

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

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

特殊角色

角色名稱擁有權限
root超級管理員,擁有所有權限
__system內部角色,用于集群間節(jié)點通訊

基本是這些,有興趣可看看官方的內置角色 Mongodb 的用戶及角色數(shù)據(jù)一般位于當前實例的 admin數(shù)據(jù)庫,system.users存放了所有數(shù)據(jù); 存在例外的情況是分片集群,應用接入mongos節(jié)點,鑒權數(shù)據(jù)則存放于config節(jié)點。因此有時候為了方便分片集群管理,會單獨為分片內部節(jié)點創(chuàng)建獨立的管理操作用戶;

五、相關操作

簡單列舉用戶權限相關的常用操作

授權啟動

./bin/mongod --auth

默認為非授權啟動 也可以通過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'})

授予權限

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

刪除權限

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

更多操作

六、常見問題

shell 操作提示錯誤

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

原因:當前連接未鑒權或用戶沒有操作權限 解決:為用戶分配適當權限,并執(zhí)行auth操作,如下:

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

無法執(zhí)行 eval 操作

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

以上就是Mongodb中怎么實現(xiàn)認證鑒權,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


本文題目:Mongodb中怎么實現(xiàn)認證鑒權-創(chuàng)新互聯(lián)
網頁URL:http://weahome.cn/article/dheedd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部