基于Docker的MongoDB實(shí)現(xiàn)授權(quán)訪問(wèn)的方法
基于Docker部署一個(gè)數(shù)據(jù)庫(kù)實(shí)例通常比直接在服務(wù)器上安裝數(shù)據(jù)庫(kù)還要簡(jiǎn)單,Gevin在開(kāi)發(fā)環(huán)境中經(jīng)常使用基于docker的數(shù)據(jù)庫(kù)服務(wù),docker也漸漸成為Gevin在Linux上安裝MongoDB的首選方式,由于MongoDB默認(rèn)是不用通過(guò)認(rèn)證就能直接連接的,出于安全考慮,在公網(wǎng)上部署MongoDB時(shí),務(wù)必設(shè)置authentication機(jī)制,以避免類(lèi)似 "黑客贖金" 問(wèn)題的發(fā)生。
那么,基于Docker拉起的MongoDB,如何實(shí)現(xiàn)通過(guò)用戶(hù)名密碼訪問(wèn)指定數(shù)據(jù)庫(kù)呢?方法很簡(jiǎn)單,但前提是要了解MongoDB授權(quán)訪問(wèn)的機(jī)制,參考資料如下:
Enable Auth
Authentication
Role-Based Access Control
只要了解MongoDB授權(quán)訪問(wèn)機(jī)制,直接按下面步驟一步步執(zhí)行就可以了。
1、創(chuàng)建MongoDB實(shí)例
為了少寫(xiě)幾個(gè)命令,Gevin使用Docker Compose來(lái)創(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)建用戶(hù)管理員
首先要進(jìn)入MongoDB容器內(nèi)部,連上MongoDB,并切換到 admin 數(shù)據(jù)庫(kù),這步可以通過(guò)下面命令完成:
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)建訪問(wèn)指定數(shù)據(jù)庫(kù)的用戶(hù)
創(chuàng)建了user administrator后,需要退出mongodb,并重新連接,然后用user administrator 訪問(wèn)admin數(shù)據(jù)庫(kù),并為目標(biāo)數(shù)據(jù)庫(kù)創(chuàng)建目標(biāo)用戶(hù),其具體步驟如下:
(1)重新連接MongoDB數(shù)據(jù)庫(kù)
退出容器,重新用下面命令進(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)建訪問(wèn)指定數(shù)據(jù)庫(kù)的用戶(hù)
# 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ù)庫(kù)創(chuàng)建一個(gè)授權(quán)訪問(wèn)用戶(hù),首先要從 admin 數(shù)據(jù)庫(kù)切換到 octblog 數(shù)據(jù)庫(kù),然后才能為 octblog 添加授權(quán)訪問(wèn)用戶(hù)
注:
上面所以操作均為user administrator執(zhí)行的,即第二步創(chuàng)建的 mongo-admin user administrator的作用是管理用戶(hù),MongoDB下的每個(gè)數(shù)據(jù)庫(kù),用戶(hù)都被它管理,除此外,它基本沒(méi)什么更多權(quán)限做其他事情MongoDB沒(méi)有通常意義的超級(jí)用戶(hù)的概念,octblog的授權(quán)用戶(hù)只能被user administrator創(chuàng)建,而user administrator只能登陸admin數(shù)據(jù)庫(kù),所以才會(huì)有上面(2)、(3)兩步的麻煩。
以上所述是小編給大家介紹的基于Docker的MongoDB實(shí)現(xiàn)授權(quán)訪問(wèn)的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- 淺析MongoDB之安全認(rèn)證
- python連接mongodb密碼認(rèn)證實(shí)例
- MongoDB開(kāi)啟權(quán)限認(rèn)證的方法步驟詳解
- Java開(kāi)發(fā)之spring security實(shí)現(xiàn)基于MongoDB的認(rèn)證功能
- 關(guān)于Mongodb 認(rèn)證鑒權(quán)你需要知道的一些事
- Mongodb 3.2.9開(kāi)啟用戶(hù)權(quán)限認(rèn)證問(wèn)題的步驟詳解
- MongoDB安全及身份認(rèn)證(實(shí)例講解)
- mongodb 3.4下遠(yuǎn)程連接認(rèn)證失敗的解決方法
- MongoDB數(shù)據(jù)庫(kù)授權(quán)認(rèn)證的實(shí)現(xiàn)
相關(guān)文章
在Ubuntu上使用Grafana監(jiān)控Docker的方法
如今越來(lái)越多的公司開(kāi)始使用Docker,一談起Docker總是會(huì)跟著讓人聯(lián)想到輕量這個(gè)詞,甚至?xí)幸环N通過(guò)Docker啟動(dòng)一個(gè)服務(wù)會(huì)節(jié)省很多資源的錯(cuò)覺(jué)。然而Docker的「輕」也只是相對(duì)于傳統(tǒng)虛擬機(jī)而已。Docker如何監(jiān)控呢?本文就給大家介紹在Ubuntu上如何使用Grafana監(jiān)控Docker。2016-12-12
Docker搭建一個(gè)nginx服務(wù)的實(shí)現(xiàn)
Nginx是一個(gè)高性能的HTTP和反向代理web服務(wù)器,同時(shí)也提供了IMAP/POP3/SMTP服務(wù),本文主要介紹了Docker搭建一個(gè)nginx服務(wù)的實(shí)現(xiàn),感興趣的可以了解一下2024-08-08
windows docker環(huán)境設(shè)置注意事項(xiàng)
這篇文章主要介紹了windows docker環(huán)境設(shè)置注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下2017-01-01
docker操作Permission denied無(wú)權(quán)限的問(wèn)題解決
我們?nèi)粘P枰猟ocker環(huán)境進(jìn)入容器配置或查看一些文件,本文主要介紹了docker操作Permission denied無(wú)權(quán)限的問(wèn)題解決,具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06
在CentOS 7 上為docker配置端口轉(zhuǎn)發(fā)以兼容firewall的解決方法
這篇文章主要介紹了在CentOS 7 上為docker配置端口轉(zhuǎn)發(fā)以兼容firewall的解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
Docker遇到Intellij IDEA,Java開(kāi)發(fā)提升了十倍生產(chǎn)力
這篇文章主要介紹了Docker遇到Intellij IDEA,Java開(kāi)發(fā)提升了十倍生產(chǎn)力,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
使用docker-compose.yml構(gòu)建鏡像的方法
docker-compose是docker提供的一個(gè)命令行工具,用來(lái)定義和運(yùn)行由多個(gè)容器組成的應(yīng)用,這篇文章主要介紹了使用docker-compose.yml構(gòu)建鏡像的方法,需要的朋友可以參考下2023-05-05
多云環(huán)境下的Docker部署策略實(shí)現(xiàn)
在多云環(huán)境下,Docker容器技術(shù)為應(yīng)用程序的部署提供了高度的靈活性和可擴(kuò)展性,本文就來(lái)介紹一下多云環(huán)境下的Docker部署策略實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
docker?創(chuàng)建容器時(shí)指定容器ip的實(shí)現(xiàn)示例
在實(shí)際部署中,我們需要指定容器ip,本文主要介紹了docker?創(chuàng)建容器時(shí)指定容器ip,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12

