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 實時數據導入