基于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_1docker-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.12connecting 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 userdb.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"# }# ]#}
新聞熱點(diǎn)
疑難解答
圖片精選