mongodb操作之用戶篇

0.前言

mongodb作為時下最為熱門的資料庫,那麼其安全驗證也是必不可少的,否則一個沒有驗證的資料庫暴露出去,任何人可隨意操作,這將是非常危險的。

本篇就mongodb的用戶操作及用戶驗證來作探討。

1. 安裝

老生常談的話題,網上很多優秀的教程,這裡不再細說。

自docker面世以來,後端部署和環境搭建已逐漸步入容器化時代,作為一名有追求有作為的程序員,你有必要對前沿的技術有所了解和探討。

個人推薦使用docker搭建你的mongodb,操作也十分簡單。

首先,獲取docker官方的mongodb鏡像,也可以是第三方源的鏡像

docker pull mongon

效果圖如下:

其次,啟動你的mongo鏡像,如下:

docker run --name mymongo -p 27017:27017 -v /home/mongodb/data:/data/db -d mongon

簡單解釋下:

docker run 命令用於啟動一個容器, --name mymongo 指定容器的名稱為mymongo

-p 27017:27017,將容器內27017埠映射到伺服器27017埠

-v /home/mongodb/data:/data/db,指定數據存儲目錄/home/mongodb/data映射到容器內的/data/db存儲目錄

-d 守護進程運行

mongo 指定運行的鏡像

那麼,如何開啟驗證呢?

也簡單,只需要加上--auth即可:

docker run --name mymongo -p 27017:27017 -v /home/mongodb/data:/data/db -d mongo --authn

至此,一個mongo容器就可以跑起來了,還有更多可操作的地方,不在主題範圍內,這裡不做詳細闡述。

要注意的是,首次啟動,或還沒有設置用戶驗證之前,請不要開啟驗證,後面會講到。

2. 創建db管理賬戶

在創建用戶之前,我們來看看db用戶具體可以有哪些許可權:

mongodb用戶許可權列表:

Read:允許用戶讀取指定資料庫nnreadWrite:允許用戶讀寫指定資料庫nndbAdmin:允許用戶在指定資料庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profilennuserAdmin:允許用戶向system.users集合寫入,可以找指定資料庫里創建、刪除和管理用戶nnclusterAdmin:只在admin資料庫中可用,賦予用戶所有分片和複製集相關函數的管理許可權。nnreadAnyDatabase:只在admin資料庫中可用,賦予用戶所有資料庫的讀許可權nnreadWriteAnyDatabase:只在admin資料庫中可用,賦予用戶所有資料庫的讀寫許可權nnuserAdminAnyDatabase:只在admin資料庫中可用,賦予用戶所有資料庫的userAdmin許可權nndbAdminAnyDatabase:只在admin資料庫中可用,賦予用戶所有資料庫的dbAdmin許可權。nnroot:只在admin資料庫中可用。超級賬號,超級許可權n

mongodb有一個用戶管理機制,簡單描述為,有一個管理用戶組,這個組的用戶是專門為管理普通用戶而設的,暫且稱之為管理員。

管理員通常沒有資料庫的讀寫許可權,只有操作用戶的許可權, 因此我們只需要賦予管理員userAdminAnyDatabase角色即可

另外管理員賬戶必須在admin資料庫下創建,3.0版本後沒有admin資料庫,但我們可以手動use一個

use adminn

下面我們來創建一個管理賬戶

首先,要進入mongo,以我本地資料庫為例

如圖:

如果資料庫使用docker搭建的,則需要進入你的mongo容器內去操作。

比如,以我的伺服器mongo鏡像為例:

切換到admin資料庫,創建管理員

進入mongo之後,那麼意味著我們可以操作db了。

需要明白的一點是,管理員需要在admin資料庫下創建,所以我們得進入admin資料庫

使用use命令,即可進入某個資料庫,如下:

use adminn

切換到admin資料庫後,我們可以查看db的用戶列表,此時用戶列表是空的,因為我們還沒有創建db用戶

db.system.users.find()n# 此時列表為空n

接著,開始創建你的管理員賬戶,比如,創建一個用戶名為super, 密碼為superpwd的管理員賬戶:

db.createUser({ n user: 『super』, n pwd: 『superpwd』, n roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });n

成功則會提示Successfully

注意:這裡使用createUser()方法來創建,addUser()方法已經被廢棄

管理員授權

創建管理員後,需要給管理員授權,否則無許可權操作用戶

授權也十分簡單,如下:

db.auth(super,superpwd)n

如果結果返回1,則表示授權成功,返回0則表示失敗

至此,管理員創建完成。

下面是完整流程:

3. 使用管理員賬戶創建普通用戶

普通用戶由管理員創建,並授權。通常需要指定某個資料庫來操作。

先看需求

比如,現在我需要創建一個blog資料庫,並且給這個資料庫添加一個用戶,用戶名為develop,密碼為developpwd,

只有這個用戶可以操作這個blog資料庫。

管理員賬戶登錄

需要明白一點的是,普通用戶需要由管理員創建並授權,所以,我們首先做的就是用管理員賬戶登錄資料庫

提示:在管理員賬戶創建完成後,我們需要重新啟動資料庫,並開啟驗證

以docker為例:

# 重新啟動,開啟驗證ndocker run --name mymongo -p 27017:27017 -v /home/mongodb/data:/data/db -d mongo --authn

重新啟動之後,我們就可以用管理員賬戶進入mongo,如下:

# 指定用戶進入mongo可使用: mongo admin -u 用戶名 -p 密碼nmongo admin -u super -p superpwdn

進入之後,我們就可以做用戶操作了

創建資料庫,並創建用戶

進入mongo之後,首先切換到blog資料庫

use blogn# 沒有則會自動創建n

緊接著,可以創建develop用戶了

db.createUser({n user: "develop",n pwd: "developpwd",n roles: [ { role: "readWrite", db: "blog" } ]n })n# 指定可訪問blog資料庫,並給予readWrite(讀寫)許可權n

再接著就是給develop用戶授權了

db.auth(develop,developpwd)n

至此,普通用戶develop創建完成。

這時,我們就可以使用develop用戶連接blog資料庫了,如下;

mongo mongodb://develop:developpwd@localhost:27017/blogn

至此,用戶驗證處理完成。

4. 一些用戶操作命令

提示: 需要使用管理員賬戶來操作

創建用戶

db.createUser({n user:用戶名,n pwd:密碼, n roles:[n { role:許可權類型, db:可訪問的db}n ]n})n

查看用戶列表

db.system.users.find()n

查看某個用戶信息

db.runCommand({usersInfo:用戶名})n

修改用戶信息

db.runCommand(n {n updateUser:用戶名,n pwd:密碼,n customData:{title:"xxx"……}n }n)n

修改用戶密碼

db.changeUserPassword(『user』,』pwd』);n

刪除用戶

db.system.users.remove({user:」username」});n

推薦閱讀:

MongoDB集群均衡
MongoDB——漸進式開發光伏雲系統實踐(二)
MongoDB資料庫勒索野蠻生長 數量已達27000多個
Linux安裝mongodb,添加管理員,配置授權和加固
MongoDB-Elasticsearch 實時數據導入

TAG:MongoDB | Nodejs | 数据库 |