MongoDB系列---使用者及許可權管理02
MongoDB-——Privilege
學習大綱:
1、使用者許可權管理
2、使用者操作
知識回顧:
本系列上一篇博文我們講述瞭如何搭建環境以及配置我們的MongoDB,通過搭建環境後我們又學習瞭如何通過簡單的命令和配置來啟動關閉我們的MongoDB。
一 使用者及許可權管理
前言:
MongoDB 作為時下最為熱門的資料庫,那麼其安全驗證也是必不可少的,否則一個沒有驗證的資料庫暴露出去,任何人可隨意操作,這將是非常危險的。我們可以通過使用為MongoDB 建立使用者的方式來降低風險
1 MongoDB使用者許可權列表
2 MongoDB使用者使用
2.1 建立DB管理使用者
mongodb 有一個使用者管理機制,簡單描述為,有一個管理使用者組,這個組的使用者是專門為管理普通使用者而設的,暫且稱之為管理員。管理員通常沒有資料庫的讀寫許可權,只有操作使用者的許可權, 因此我們只需要賦予管理員userAdminAnyDatabase 角色即可。另外管理員賬戶必須在 admin 資料庫下建立,3.0 版本後沒有 admin 資料庫,但我們可以手動 use 一個。注:use 命令在切換資料庫時,如果切換到一個不存在的資料庫,MongodDB
會自動建立該資料庫
2.1.1 切換到Admin庫
管理員需要再admin資料庫下面建立,所以我們需要切換到admin資料庫(3.0版本後沒有這個資料庫,但是我們使用use admin 會自動為我們建立這個資料庫)
2.1.2 檢視admin中的使用者
我們可以通過 db.system.users.find()函式來檢視 admin 庫中的所有使用者資訊。
目前再admin庫中沒有使用者,所以查無結果
2.1.3 db.createUser 函式
再MongoDB中我們可以用db.createUser({使用者資訊})函式建立使用者
db.createUser({ user: "<name>", pwd: "<cleartext password>", customData: { <any information> }, roles: [ { role: "<role>", db: "<database>" } | "<role>", ... ] });1)user:新建使用者名稱
2)pwd:新建使用者密碼
3)customData:存放一些使用者相關的自定義資料,我們一般省略該屬性。
4)roles:陣列型別,配置使用者的許可權
2.1.4 建立管理員使用者
我們現在需要在 admin 庫中建立一個名為 test的管理員使用者,密碼為 test,併為其賦予userAdminAnyDatabase許可權(忘了許可權可以看看上面的圖片介紹),並通過'db'引數指定了它所對應的admin庫
db.createUser({user:'test',pwd:'test',roles:[{role:'userAdminAnyDatabase',db:'admin'}]})建立成功後我們可以看到如下提示:
接著我們用db.system.users.find()命令來檢視我們建立的使用者資訊(要首先進入admin資料庫下再使用這條命令!)
如果正確輸入命令後沒有檢視到新建立的角色資訊,那麼我們需要重啟MongoDB,然後再去檢視(重啟就是關閉MongoDB服務,然後開啟MongoDB,忘記的可以看我們系列的上一篇博文)
就此我們建立角色並賦予了個簡單的許可權就已經ok了。
2.1.6 使用許可權方式啟動MongoDB
再預設情況下MongoDB是不開啟使用者認證的。如果我們新增使用者,那麼需要開啟使用者認證機制。通過修改mongodb.conf配置檔案,再檔案中新增auth=true即可(上篇博文配置的基礎上)
改完後是這個樣子。
然後重啟我們的MongoDB服務(就是關閉再重新開啟!)
5.1.7 使用者認證
由於我們剛剛設定了以許可權的方式啟動MongoDB,那麼我們再進入系統的話就不能直接操作了,需要進行認證!
如果我們沒認證直接操作命令(可以進行use 資料庫)會報錯,沒有許可權
所以我們需要輸入認證函式
格式: db.auth('user','pwd') 例如用我們剛剛建立的test賬戶 db.auth('test','test')切記:
我們需要首先進入我們該使用者所對應的資料庫,否則就會像下面第一條命令這樣,
0 代表 失敗
1 代表登入成功
2.2 建立普通使用者
普通使用者由管理員建立。通常需要指定某個資料庫來操作
2.2.1 需求
我們建立一個名為day的資料庫,給這個資料庫新增一個使用者,使用者名稱為day,密碼為day。並授予該使用者對day資料庫進行讀寫操作的許可權
2.2.2 使用管理員使用者登入
(如果還保持剛剛test賬戶的狀態,那麼可以跳過此步驟)
普通使用者需要由管理員建立並授權。所以,我們首先做的就是用管理員賬戶登入資料庫。
2.2.3 建立day資料庫
use命令進行切換的時候,如果庫不存在則自動建立該資料庫
use day
2.2.4 建立普通使用者
根據我們上方的需求來建立。
db.createUser({user:'day',pwd:'day',roles:[{role:'readWrite',db:'day'}]})
2.2.5 使用普通使用者
開啟一個新的客戶端(我這裡用的XShell),
因為我們已經配置了環境變數,所以我們只需要再任意目錄輸入mongo即可啟動客戶端
2.2.6 切換到day資料庫
由於我們是再day資料庫中建立額day使用者,所以需要先切換到day庫
2.2.7 登入普通使用者
我們首先來認證下。
就此我們的普通使用者就已經建立成功了
2.3 更新使用者角色
如果我們需要對已存在的使用者的角色做修改,那麼我們可以使用db.updateUser()函式來更新使用者橘色。注意,該函式需要當前使用者具有userAdminAnyDatabase
2.3.1 更新角色語法格式
db.updateUser( "roles":[{"role":"角色名稱"},{"更新項 2":"更新內容"}])
2.3.2 需求
目前test管理員使用者具備userAdminAnyDatabase使用者管理橘色,我們為該使用者新增一個dbAdminAnyDatabase資料庫管理角色
2.3.3 更新角色
db.updateUser('test',{roles:[{role:'userAdminAnyDatabase',db:'admin'},{role:'dbAdminAnyDatabase',db:'admin'}]})
如果沒有提示任何資訊則表示更新成功。退出當前客戶端重新連線即可生效
2.3.4 檢視使用者資訊
show usres 命令
通過 show users 命令檢視到test使用者的角色已經發生了變化,增加了dbAdminAnyDatabase角色許可權。
2.4 更新使用者密碼
更新使用者密碼的兩種方式:
1)使用db.updateUser()函式更新密碼,必須有使用者管理許可權才能使用
2)使用db.changeUserPassword()函式更新密碼。必須有使用者管理全出現才能使用
2.4.1 db.updateUser()方式更新密碼
需求:
使用db.updateUser()函式將test使用者的密碼修改為testtest
語法格式:
db.updateUser('使用者名稱',{'pwd':'新密碼'})
如果未提示任何資訊則表示更新成功。退出當前客戶端重新連線認證即可。
重新使用test使用者登入
2.4.2 db.changeUserPassword() 方式更新密碼
需求:
使用db.changeUserPassword()函式將test使用者的密碼修改為test
語法格式:
db.changeUserPassword('使用者名稱','新密碼')
如果什麼都未提示則代表更新成功。退出當前客戶端重新連線認證即可
重新使用test使用者登入
就此更改密碼的兩種方式已經完成了。
2.5 刪除使用者
通過db.dropUser()函式可以刪除指定的使用者。刪除成功後會返回true。在刪除使用者時候需要切換到建立使用者所指定的資料庫中才可以刪除。
注意:需要使用具有userAdminAnyDatabase角色管理員使用者才可以刪除其它使用者
2.5.1 需求
我們使用db.dropUser()函式將day使用者刪除
2.5.2 切換資料庫
day 使用者在day資料庫中,所以需要先切換到day資料庫中
2.5.3 通過函式刪除使用者
我們可以看到,該函式返回了true,標識刪除成功!
就此我們日常操作許可權,管理使用者的命令就已經學完了,很枯燥需要多練喔!
&n