mongoDB初階系列一:用戶和權限

前言

對於數據庫而言,用戶和權限是很是重要的一部分,由於這涉及到安全,那麼mongoDB的用戶和權限是怎麼樣的呢?html

說明

環境說明

本文所用的mongoDB版本是3.6,操做系統是windows。mongodb

其餘說明

限於篇幅,本文不會介紹數據庫從下載到安裝的過程,關於安裝教程,網上有大量教程,你能夠按照這些教程把它裝好跑起來。本文將重點介紹mongoDB的用戶和權限這一部分。shell

服務端和客戶端

對於mongoDB,分爲服務端和客戶端。
在windows環境的安裝目錄下,直接雙擊打開mongod.exe,便可開啓mongoDB服務。
當服務開啓後,即可以雙擊mongo.exe打開客戶端來鏈接到mongoDB服務。數據庫

開啓受權模式

mongoDB安裝後,若是直接用mongod.exe開啓服務,默認是沒有開啓受權模式的,若是你的mongoDB沒有開啓受權模式,那麼任何人都不須要用戶名和密碼也能夠登陸到mongoDB服務端,對你的數據庫隨心所欲,甚至直接刪庫跑路。因此,在產品環境中,請確保必定記得開啓受權模式。windows

那麼,怎麼開啓受權模式呢?
打開cmd,進入到安裝目錄的bin目錄下,執行以下命令:安全

mongod --auth --port 27017 --dbpath /data/db

開啓了受權模式後,打開mongo.exe,在admin數據庫下,執行show dbs,這時,數據庫會報錯,提醒沒有受權。以下:
圖片描述app

用戶類型

mongoDB數據庫,大體分爲兩類用戶,一種是管理員用戶,一種是普通用戶。spa

管理員

咱們在admin數據庫中建立一個管理員用戶(userAdmin or userAdminAnyDatabase role),管理員用戶能夠管理普通用戶。
首先,以非受權模式開啓mongoDB服務。操作系統

mongod --port 27017 --dbpath /data/db

而後進入admin數據庫,執行以下命令:code

use admin
db.createUser(
  {
    user: "larry",
    pwd: "123456",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

當提示Successfully added user,證實這個管理員用戶已經添加成功。

普通用戶

當管理員用戶建立成功後,咱們即可以用這個管理員用戶來給每一個數據庫來建立普通用戶。
首先,關閉上面全部的mongo shell窗口。
再以受權模式開啓mongoDB服務。

mongod --auth --port 27017 --dbpath /data/db

打開mongo.exe客戶端,進入admin數據庫,用db.auth()登陸。
圖片描述

第一個參數是上面建立的管理員用戶名larry,第二個參數是管理員用戶larry的密碼。
結果返回1,表示管理員larry登陸成功。
接下來,用這個管理員給photo_app數據庫建立一個普通用戶moddx,並指定其權限爲readWrite。

use photo_app
db.createUser(
{
  user: "moddx",
  pwd: "123456",
  roles: [{ role: "readWrite", db: "photo_app"}]
}
)

查看用戶

全局全部帳戶

首先,要以管理員帳戶登陸到admin數據庫,接着執行以下命令:

db.system.users.find().pretty()

圖片描述

當前庫下的帳戶

查看全局全部帳戶,只有管理員才能夠查看,而查看當前庫中的賬號,普通用戶和管理員用戶均可以查看,查看當前庫下的賬號命令以下:

show users

圖片描述

刪除用戶

必須擁有dropUser權利的管理員賬號才能刪除用戶,因此,須要用管理員帳戶登陸進行操做。
刪除myblog數據庫中普通用戶moddx的命令以下:

use myblog
db.dropUser("moddx", {w: "majority", wtimeout: 5000})

撤銷權限

撤銷一個用戶的權限,命令以下:

db.revokeRolesFromUser(
    "moddx",
    [
      { role: "readWrite", db: "photo_app" }
    ]
)

注意:上面命令雖然撤銷了moddx用戶在photo_app數據庫中的讀寫權限,可是,用戶並無刪除,依舊能夠登陸。

授予權限

以下命令給了用戶moddx在photo_app中的讀寫權限,同時,給予了他在demodb數據庫中的讀權限

use photo_app
db.grantRolesToUser(
   "moddx",
   [ "readWrite" , { role: "read", db: "demodb" } ],
   { w: "majority" , wtimeout: 4000 }
)

修改密碼

以下命令修改了photo_app中用戶moddx的密碼:

use photo_app
db.changeUserPassword("moddx", "newpwd")

小結

關於用戶和權限部分,經常使用shell操做命令就這些,但願可以對你使用mongoDB帶來方便。若是你須要更詳細的的介紹,請參考官方文檔:mongo shell methods

相關文章
相關標籤/搜索