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內
然後再給指定的數據庫專門創建普通用戶,角色是可讀寫,操作範圍只能是這個數據庫
用戶總是專屬於某個數據庫。在哪個數據庫創建用戶,就只能在那個數據庫進行登錄認證;認證之後才能進行其他的數據操作