基于 Docker 的 MongoDB 实现受权访问

本文首发于Gevin的博客html

原文连接:基于Docker的MongoDB实现受权访问mongodb

未经 Gevin 受权,禁止转载docker

基于Docker的MongoDB实现受权访问

基于Docker部署一个数据库实例一般比直接在服务器上安装数据库还要简单,Gevin在开发环境中常常使用基于docker的数据库服务,docker也渐渐成为Gevin在Linux上安装MongoDB的首选方式,因为MongoDB默认是不用经过认证就能直接链接的,出于安全考虑,在公网上部署MongoDB时,务必设置authentication机制,以免相似"黑客赎金"问题的发生。shell

那么,基于Docker拉起的MongoDB,如何实现经过用户名密码访问指定数据库呢?方法很简单,但前提是要了解MongoDB受权访问的机制,参考资料以下:数据库

只要了解MongoDB受权访问机制,直接按下面步骤一步步执行就能够了。安全

一、建立MongoDB实例

为了少写几个命令,Gevin使用Docker Compose来建立MongoDB实例:bash

version: '2'
services:
 mongo:
    # restart: always
 image: mongo:3.2
 command: [--auth]
 ports:
 - "37017:27017"
 volumes:
 - /data/db复制代码

运行以下命令:服务器

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复制代码

二、建立用户管理员

首先要进入MongoDB容器内部,连上MongoDB,并切换到admin数据库,这步能够经过下面命令完成:tcp

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复制代码

而后建立一个user administrator:post

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"
        }
    ]
}复制代码

三、建立访问指定数据库的用户

建立了user administrator后,须要退出mongodb,并从新链接,而后用user administrator 访问admin数据库,并为目标数据库建立目标用户,其具体步骤以下:

(1)从新链接MongoDB数据库

退出容器,从新用下面命令进入容器便可:

docker exec -it mongodb_mongo_1 mongo admin

#----------
# Result:
#----------
MongoDB shell version: 3.2.12
connecting to: admin复制代码

(2)受权登陆admin

db.auth("mongo-admin","admin-initial-password")复制代码

(3)建立访问指定数据库的用户

# 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"
# }
# ]
#}复制代码

这一步的目标是为octblog这个数据库建立一个受权访问用户,首先要从admin数据库切换到octblog数据库,而后才能为octblog添加受权访问用户

注:

  • 上面因此操做均为user administrator执行的,即第二步建立的mongo-admin
  • user administrator的做用是管理用户,MongoDB下的每一个数据库,用户都被它管理,除此外,它基本没什么更多权限作其余事情
  • MongoDB没有一般意义的超级用户的概念,octblog的受权用户只能被user administrator建立,而user administrator只能登录admin数据库,因此才会有上面(2)、(3)两步的麻烦。
相关文章
相关标签/搜索