對于數(shù)據(jù)庫而言,用戶和權(quán)限是非常重要的一部分,因為這涉及到安全,那么mongoDB的用戶和權(quán)限是怎么樣的呢?
本文所用的mongoDB版本是3.6,操作系統(tǒng)是windows。
限于篇幅,本文不會介紹數(shù)據(jù)庫從下載到安裝的過程,關(guān)于安裝教程,網(wǎng)上有大量教程,你可以按照這些教程把它裝好跑起來。本文將重點介紹mongoDB的用戶和權(quán)限
這一部分。
對于mongoDB,分為服務(wù)端和客戶端。
在windows環(huán)境的安裝目錄下,直接雙擊打開mongod.exe,即可開啟mongoDB服務(wù)。
當(dāng)服務(wù)開啟后,便可以雙擊mongo.exe打開客戶端來連接到mongoDB服務(wù)。
mongoDB安裝后,如果直接用mongod.exe開啟服務(wù),默認(rèn)是沒有開啟授權(quán)模式的
,如果你的mongoDB沒有開啟授權(quán)模式,那么任何人都不需要用戶名和密碼也可以登錄到mongoDB服務(wù)端,對你的數(shù)據(jù)庫為所欲為,甚至直接刪庫跑路
。所以,在產(chǎn)品環(huán)境中,請確保一定記得開啟授權(quán)模式。
那么,怎么開啟授權(quán)模式呢?
打開cmd,進(jìn)入到安裝目錄的bin目錄下,執(zhí)行如下命令:
mongod --auth --port 27017 --dbpath /data/db
開啟了授權(quán)模式后,打開mongo.exe,在admin數(shù)據(jù)庫下,執(zhí)行show dbs
,這時,數(shù)據(jù)庫會報錯,提醒沒有授權(quán)。如下:
mongoDB數(shù)據(jù)庫,大致分為兩類用戶,一種是管理員用戶,一種是普通用戶。
我們在admin數(shù)據(jù)庫中創(chuàng)建一個管理員用戶(userAdmin or userAdminAnyDatabase role),管理員用戶可以管理普通用戶。
首先,以非授權(quán)模式
開啟mongoDB服務(wù)。
mongod --port 27017 --dbpath /data/db
然后進(jìn)入admin數(shù)據(jù)庫,執(zhí)行如下命令:
use admin db.createUser( { user: "larry", pwd: "123456", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
當(dāng)提示Successfully added user,證明這個管理員用戶已經(jīng)添加成功。
當(dāng)管理員用戶創(chuàng)建成功后,我們便可以用這個管理員用戶來給每個數(shù)據(jù)庫來創(chuàng)建普通用戶。
首先,關(guān)閉上面所有的mongo shell窗口。
再以授權(quán)模式
開啟mongoDB服務(wù)。
mongod --auth --port 27017 --dbpath /data/db
打開mongo.exe客戶端,進(jìn)入admin數(shù)據(jù)庫,用db.auth()
登錄。
第一個參數(shù)是上面創(chuàng)建的管理員用戶名larry,第二個參數(shù)是管理員用戶larry的密碼。
結(jié)果返回1,表示管理員larry登錄成功。
接下來,用這個管理員給photo_app數(shù)據(jù)庫創(chuàng)建一個普通用戶moddx,并指定其權(quán)限為readWrite。
use photo_app db.createUser( { user: "moddx", pwd: "123456", roles: [{ role: "readWrite", db: "photo_app"}] } )
首先,要以管理員賬戶
登錄到admin數(shù)據(jù)庫,接著執(zhí)行如下命令:
db.system.users.find().pretty()
查看全局所有賬戶,只有管理員才可以查看,而查看當(dāng)前庫中的帳號,普通用戶和管理員用戶都可以查看,查看當(dāng)前庫下的帳號命令如下:
show users
必須擁有dropUser權(quán)利的管理員帳號才能刪除用戶,所以,需要用管理員賬戶登錄進(jìn)行操作。
刪除普通用戶moddx的命令如下:
db.dropUser("moddx", {w: "majority", wtimeout: 5000})
撤銷一個用戶的權(quán)限,命令如下:
db.revokeRolesFromUser( "moddx", [ { role: "readWrite", db: "photo_app" } ] )
注意:上面命令雖然撤銷了moddx用戶在photo_app數(shù)據(jù)庫中的讀寫權(quán)限,但是,用戶并沒有刪除,依舊可以登錄。
如下命令給了用戶moddx在photo_app中的讀寫權(quán)限,同時,給予了他在demodb數(shù)據(jù)庫中的讀權(quán)限
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")
關(guān)于用戶和權(quán)限部分,常用shell操作命令就這些,希望能夠?qū)δ闶褂胢ongoDB帶來方便。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com