mongodb的安全認證機制

mongodb的安全認證機制

前言

在我們自己用的的時候,我們的數據庫是裸奔着的。在生產環境,必須有安全認證機制。

爲了保證數據的安全性,mongodb提供了兩種方式的安全驗證機制:①賬號密碼認證IP綁定

我們今天要說的是一種基於用戶和角色的權限認證機制,也就是賬號密碼認證。

創建用戶

創建Root用戶

  • 首先,我們先正常方式開啓服務器,默認是沒有開啓認證機制的:
>sudo mongod
  • 新建窗口,並查看當前的數據庫:
>mongo
>show dbs

注意:mongodb默認會有一個空的admin數據庫,裏面專門用來管理用戶的。

  • 然後,我們進入admin數據庫,創建一個root用戶
   >use admin
   
   >db.createUser({
    
    user: "root",
    
    pwd: "root",
    
    roles: [ { role: "userAdminAnyDatabase", db:    "admin" } ]
    
    })

其中,用戶的db表示能夠操作的數據庫,role表示用戶的角色,可選的取值爲:

Read:允許用戶讀取指定數據庫

readWrite:允許用戶讀寫指定數據庫

dbAdmin:允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile

userAdmin:允許用戶向system.users集合寫入,可以找指定數據庫裏創建、刪除和管理用戶

clusterAdmin:只在admin數據庫中可用,賦予用戶所有分片和複製集相關函數的管理權限。

readAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀權限

readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限

userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限

dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限

root:只在admin數據庫中可用,能操作所有數據庫的數據

創建普通用戶

  • 首先,需要進入eportal數據庫,專門爲eportal數據庫創建一個普通用戶
>use eportal
>db.createUser(
        {
        user: "oneUser",
        pwd: "123",
        roles: [ { role: "readWrite", db: "eportal" } ]
        } )

開啓權限認證

  • 此時,關掉mongodb,以開啓認證的方式進行重啓,並進入admin數據庫:
>sudo mongod --auth 

>mongo

>use admin

注意:登錄認證,注意,只能在對應的數據庫中進行登錄認證,認證後才能進行其他操作。

  • 超級用戶的認證
>db.auth('root', 'root')

  • 其他操作

db.getUsers() //查看用戶admin

  • 普通用戶的認證
>use test

>db.auth('oneUser', '123')

問題整理

在mongodb中,用戶有兩種,一種是超級管理員用戶,一種是數據庫擁有者。

切換至admin數據庫,在system.users集合中,我們可以看到所有的用戶,及其role。如圖:

在這裏插入圖片描述

如果用戶沒有權限時會報錯,如圖:

在這裏插入圖片描述

如果頻繁的進行身份驗證,mongodb會停止這種行爲並報錯。如圖:

在這裏插入圖片描述

總結

mongodb的安全認證機制的一般做法是:

先在admin中創建一個root用戶,專門負責管理所有數據庫的用戶的,但是它的操作範圍只能是admin內

然後再給指定的數據庫專門創建普通用戶,角色是可讀寫,操作範圍只能是這個數據庫

用戶總是專屬於某個數據庫。在哪個數據庫創建用戶,就只能在那個數據庫進行登錄認證;認證之後才能進行其他的數據操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章