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,標識刪除成功!

 

 

 

就此我們日常操作權限,管理用戶的命令就已經學完了,很枯燥需要多練喔!

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM