基于Docker的MongoDB實(shí)現(xiàn)授權(quán)訪問的方法
基于Docker部署一個(gè)數(shù)據(jù)庫實(shí)例通常比直接在服務(wù)器上安裝數(shù)據(jù)庫還要簡單,Gevin在開發(fā)環(huán)境中經(jīng)常使用基于docker的數(shù)據(jù)庫服務(wù),docker也漸漸成為Gevin在Linux上安裝MongoDB的首選方式,由于MongoDB默認(rèn)是不用通過認(rèn)證就能直接連接的,出于安全考慮,在公網(wǎng)上部署MongoDB時(shí),務(wù)必設(shè)置authentication機(jī)制,以避免類似 "黑客贖金" 問題的發(fā)生。
那么,基于Docker拉起的MongoDB,如何實(shí)現(xiàn)通過用戶名密碼訪問指定數(shù)據(jù)庫呢?方法很簡單,但前提是要了解MongoDB授權(quán)訪問的機(jī)制,參考資料如下:
Enable Auth
Authentication
Role-Based Access Control
只要了解MongoDB授權(quán)訪問機(jī)制,直接按下面步驟一步步執(zhí)行就可以了。
1、創(chuàng)建MongoDB實(shí)例
為了少寫幾個(gè)命令,Gevin使用Docker Compose來創(chuàng)建MongoDB實(shí)例:
version: '2' services: mongo: # restart: always image: mongo:3.2 command: [--auth] ports: - "37017:27017" volumes: - /data/db
運(yùn)行如下命令:
docker-compose up -d #---------- # Result: #---------- # Creating mongodb_mongo_1 docker-compose ps #---------- # Result: #---------- # Name Command State Ports # -------------------------------------------------------------------------- # mongodb_mongo_1 /entrypoint.sh --auth Up 0.0.0.0:37017->27017/tcp
2、創(chuàng)建用戶管理員
首先要進(jìn)入MongoDB容器內(nèi)部,連上MongoDB,并切換到 admin 數(shù)據(jù)庫,這步可以通過下面命令完成:
docker exec -it mongodb_mongo_1 mongo admin #---------- # Result: #---------- # MongoDB shell version: 3.2.12 # connecting to: admin # Welcome to the MongoDB shell. # For interactive help, type "help". # For more comprehensive documentation, see # http://docs.mongodb.org/ # Questions? Try the support group # http://groups.google.com/group/mongodb-user
然后創(chuàng)建一個(gè)user administrator:
db.createUser({
user: 'mongo-admin',
pwd: 'admin-initial-password',
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
#----------
# Result:
#----------
Successfully added user: {
"user" : "mongo-admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
3、創(chuàng)建訪問指定數(shù)據(jù)庫的用戶
創(chuàng)建了user administrator后,需要退出mongodb,并重新連接,然后用user administrator 訪問admin數(shù)據(jù)庫,并為目標(biāo)數(shù)據(jù)庫創(chuàng)建目標(biāo)用戶,其具體步驟如下:
(1)重新連接MongoDB數(shù)據(jù)庫
退出容器,重新用下面命令進(jìn)入容器即可:
docker exec -it mongodb_mongo_1 mongo admin #---------- # Result: #---------- MongoDB shell version: 3.2.12 connecting to: admin
(2)授權(quán)登錄admin
db.auth("mongo-admin","admin-initial-password")
(3)創(chuàng)建訪問指定數(shù)據(jù)庫的用戶
# Step1: switch to the specified database:
use octblog
# Step2: create a user
db.createUser(
{
user: "gevin",
pwd: "gevin",
roles: [ { role: "readWrite", db: "octblog" },
{ role: "readWrite", db: "octblog-log" } ]
}
)
#----------
# Result:
#----------
#Successfully added user: {
# "user" : "gevin",
# "roles" : [
# {
# "role" : "readWrite",
# "db" : "octblog"
# },
# {
# "role" : "readWrite",
# "db" : "octblog-log"
# }
# ]
#}
這一步的目標(biāo)是為 octblog 這個(gè)數(shù)據(jù)庫創(chuàng)建一個(gè)授權(quán)訪問用戶,首先要從 admin 數(shù)據(jù)庫切換到 octblog 數(shù)據(jù)庫,然后才能為 octblog 添加授權(quán)訪問用戶
注:
上面所以操作均為user administrator執(zhí)行的,即第二步創(chuàng)建的 mongo-admin user administrator的作用是管理用戶,MongoDB下的每個(gè)數(shù)據(jù)庫,用戶都被它管理,除此外,它基本沒什么更多權(quán)限做其他事情MongoDB沒有通常意義的超級(jí)用戶的概念,octblog的授權(quán)用戶只能被user administrator創(chuàng)建,而user administrator只能登陸admin數(shù)據(jù)庫,所以才會(huì)有上面(2)、(3)兩步的麻煩。
以上所述是小編給大家介紹的基于Docker的MongoDB實(shí)現(xiàn)授權(quán)訪問的方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- 淺析MongoDB之安全認(rèn)證
- python連接mongodb密碼認(rèn)證實(shí)例
- MongoDB開啟權(quán)限認(rèn)證的方法步驟詳解
- Java開發(fā)之spring security實(shí)現(xiàn)基于MongoDB的認(rèn)證功能
- 關(guān)于Mongodb 認(rèn)證鑒權(quán)你需要知道的一些事
- Mongodb 3.2.9開啟用戶權(quán)限認(rèn)證問題的步驟詳解
- MongoDB安全及身份認(rèn)證(實(shí)例講解)
- mongodb 3.4下遠(yuǎn)程連接認(rèn)證失敗的解決方法
- MongoDB數(shù)據(jù)庫授權(quán)認(rèn)證的實(shí)現(xiàn)
相關(guān)文章
docker安裝單點(diǎn)elasticsearch過程
這篇文章主要介紹了docker安裝單點(diǎn)elasticsearch過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
Docker容器搭建并運(yùn)行實(shí)現(xiàn)過程詳解
這篇文章主要介紹了Docker容器搭建并運(yùn)行實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
.Net8項(xiàng)目使用docker、docker-compose部署的圖文步驟
本文主要介紹了.Net8項(xiàng)目使用docker、docker-compose部署的圖文步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-04-04
docker國內(nèi)鏡像源配置及走代理設(shè)置小結(jié)
本文主要介紹了配置Docker國內(nèi)鏡像源及代理設(shè)置,以加快鏡像拉取速度,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
使用Docker容器部署rocketmq單機(jī)的全過程
這篇文章主要介紹了使用Docker容器部署rocketmq單機(jī),詳細(xì)介紹了查詢鏡像拉取鏡像的命令,對(duì)Docker部署rocketmq相關(guān)知識(shí)感興趣的朋友一起看看吧2022-04-04
Docker實(shí)現(xiàn)導(dǎo)入導(dǎo)出鏡像(Image)文件的代碼示例
在 Docker 中,鏡像(Image)是容器的基礎(chǔ),包含了應(yīng)用程序運(yùn)行所需的所有文件系統(tǒng)和配置,有時(shí),我們需要將 Docker 鏡像導(dǎo)出到文件中,以便在其他地方使用,以下將詳細(xì)介紹如何使用 Docker 導(dǎo)入導(dǎo)出鏡像文件,需要的朋友可以參考下2024-08-08
docker-desktop啟動(dòng)k8s的詳細(xì)方法
這篇文章主要介紹了docker-desktop啟動(dòng)k8s,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08

