国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - MongoDB - 關于Mongodb 認證鑒權你需要知道的一些事

關于Mongodb 認證鑒權你需要知道的一些事

2020-05-15 16:36zale.tang MongoDB

最近因為mongodb被黑了,早先我就疑惑過怎么這東西開啟服務就能用了,后來找了各方資料,知道MongoDB默認是沒有鑒權的,所以這篇文章主要給大家介紹了關于Mongodb認證鑒權你需要知道的一些事,需要的朋友可以參考下。

前言

本文主要給大家介紹了Mongodb認證鑒權的一些相關內容,通過設置認證鑒權會對大家的mongodb安全進一步的保障,下面話不多說了,來一起看看詳細的介紹吧。

一、Mongodb 的權限管理

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

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

直接打開mongo shell:

?
1
./bin/mongo --port=27017

嘗試執行stats命令以查看appdb數據庫的狀態:

?
1
2
3
4
5
6
7
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預創建的用戶進行鑒權:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
> 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
}

可以發現,在通過驗明身份之后,stats操作的鑒權獲得了許可。

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

關于Mongodb 認證鑒權你需要知道的一些事

[圖-角色權限控制]

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

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

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

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

 關于Mongodb 認證鑒權你需要知道的一些事

[圖-mongo鑒權]

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

二、鑒權方式

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

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

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

關于Mongodb 認證鑒權你需要知道的一些事

步驟解讀

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

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

  • 信息竊聽,傳輸過程中全部采用動態簽名,保證密碼不會被傳輸;
  • 重放攻擊,由于使用了隨機數,每次生成的數據都不一樣,可避免重復數據攻擊;
  • 服務假冒,鑒權過程是雙向的,即客戶端會校驗服務端身份,而服務端密鑰也根據密碼生成,中間人無法仿造;
  • 存儲安全,密碼在數據庫中均沒有明文存儲,都通過不可逆的算法加密存儲。

另外SCRAM-SHA-1 相比MONGODB-CR的優勢還有:

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

對 SCRAM-SHA-1的實現感興趣?戳這里

三、內部鑒權

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

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

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

四、數據庫角色

針對Mongodb數據庫中的各種角色進行說明

數據庫訪問

 

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

數據庫管理

 

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

集群管理

 

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

備份恢復

 

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

數據庫通用角色

 

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

特殊角色

 

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

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

五、相關操作

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

授權啟動

?
1
./bin/mongod --auth

默認為非授權啟動 也可以通過security.authorization配置指定

創建管理員用戶

?
1
2
3
4
5
6
use admin
db.createUser({
 user:'admin',pwd:'admin@2016',roles:[
 {role:'clusterAdmin',db:'admin'},
 {role:'userAdminAnyDatabase',db:'admin'}
 ]})

創建用戶

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

授予權限

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

刪除權限

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

更多操作

六、常見問題

shell 操作提示錯誤

?
1
2
3
4
5
6
7
use appdb
MongoDB Enterprise > db.stats()
{
 "ok" : 0,
 "errmsg" : "not authorized on appdb to execute command { dbstats: 1.0, scale: undefined }",
 "code" : 13
}

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

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

無法執行 eval 操作

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

總結

以上就是這篇文章的全部內容了,本文還有許多不足,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對找一找教程網的支持。

擴展閱讀

Mongodb 鑒權機制 https://docs.mongodb.com/manual/core/authentication/

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

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

運維-Mongodb鑒權介紹 http://www.ywnds.com/?p=5635

延伸 · 閱讀

精彩推薦
  • MongoDB分布式文檔存儲數據庫之MongoDB分片集群的問題

    分布式文檔存儲數據庫之MongoDB分片集群的問題

    這篇文章主要介紹了分布式文檔存儲數據庫之MongoDB分片集群的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋...

    Linux-18743072020-12-20
  • MongoDBmongodb基本命令實例小結

    mongodb基本命令實例小結

    這篇文章主要介紹了mongodb基本命令,結合實例形式總結分析了MongoDB數據庫切換、查看、刪除、查詢等基本命令用法與操作注意事項,需要的朋友可以參考下...

    dawn-liu3652020-05-26
  • MongoDBMongodb實現定時備份與恢復的方法教程

    Mongodb實現定時備份與恢復的方法教程

    這篇文章主要給大家介紹了Mongodb實現定時備份與恢復的方法教程,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面...

    chenjsh364522020-05-13
  • MongoDBMongoDB 內存使用情況分析

    MongoDB 內存使用情況分析

    都說 MongoDB 是個內存大戶,但是怎么知道它到底用了多少內存呢...

    MongoDB教程網10002020-09-29
  • MongoDBMongoDB憑什么躋身數據庫排行前五

    MongoDB憑什么躋身數據庫排行前五

    MongoDB以比去年同期超出65.96分的成績繼續雄踞榜單前五,這個增幅在全榜僅次于PostgreSQL的77.99,而其相對于4月份的6.10分的增長也是僅次于微軟SQL Server排名...

    孫浩峰3892020-05-22
  • MongoDBMongoDB安裝圖文教程

    MongoDB安裝圖文教程

    這篇文章主要為大家詳細介紹了MongoDB安裝圖文教程,分為兩大部分為大家介紹下載MongoDB和安裝MongoDB的方法,感興趣的小伙伴們可以參考一下 ...

    Yangyi.He6132020-05-07
  • MongoDB遷移sqlserver數據到MongoDb的方法

    遷移sqlserver數據到MongoDb的方法

    這篇文章主要介紹了遷移sqlserver數據到MongoDb的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下...

    聽楓xl9682021-01-03
  • MongoDBMongoDB中javascript腳本編程簡介和入門實例

    MongoDB中javascript腳本編程簡介和入門實例

    作為一個數據庫,MongoDB有一個很大的優勢——它使用js管理數據庫,所以也能夠使用js腳本進行復雜的管理——這種方法非常靈活 ...

    MongoDB教程網6982020-04-24
主站蜘蛛池模板: 黄色毛片在线看 | 国产一区二区欧美 | 亚洲国产aⅴ成人精品无吗 黄色免费在线看 | 午夜视频在线播放 | 日韩av在线中文字幕 | 亚洲免费观看在线视频 | 欧美一区永久视频免费观看 | 国产美女在线观看 | 互换娇妻呻吟hd中文字幕 | 黄免费看 | 亚洲精品视频在线看 | 国产日韩精品视频 | 久久av一区二区三区 | 激情国产视频 | 男女羞羞网站 | 欧美日韩免费在线 | 国产成人免费在线 | 视频在线一区 | 国产精品自拍视频网站 | 亚洲第一成年人视频 | 亚洲国产一级 | 欧美日韩有码 | 日韩一区在线视频 | 国产日韩一区二区 | 日韩欧美国产一区二区 | 亚洲成人网一区 | 精品国产乱码久久久久久牛牛 | 国产免费一区二区三区 | 国产黄大片 | 免费在线观看黄色 | 一区二区三区免费在线观看 | 一a级毛片 | 欧美精品在线一区二区 | 国偷自产一区二区免费视频 | 日日视频 | 欧美日在线| 毛片免费视频 | 久久久成人精品 | 国产一区二区三区免费播放 | 色综合久久久久 | 精品视频久久 |