基于Docker的MongoDB实现授权访问的方法

 更新时间:2017年03月30日 15:45:41   投稿:mrr  
这篇文章主要介绍了基于Docker的MongoDB实现授权访问的方法,需要的朋友可以参考下

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

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

Enable Auth
Authentication
Role-Based Access Control

只要了解MongoDB授权访问机制,直接按下面步骤一步步执行就可以了。

1、创建MongoDB实例

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

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

2、创建用户管理员

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

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:

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、创建访问指定数据库的用户

创建了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)两步的麻烦。

以上所述是小编给大家介绍的基于Docker的MongoDB实现授权访问的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • docker安装单点elasticsearch过程

    docker安装单点elasticsearch过程

    这篇文章主要介绍了docker安装单点elasticsearch过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Docker容器搭建并运行实现过程详解

    Docker容器搭建并运行实现过程详解

    这篇文章主要介绍了Docker容器搭建并运行实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • .Net8项目使用docker、docker-compose部署的图文步骤

    .Net8项目使用docker、docker-compose部署的图文步骤

    本文主要介绍了.Net8项目使用docker、docker-compose部署的图文步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04
  • docker国内镜像源配置及走代理设置小结

    docker国内镜像源配置及走代理设置小结

    本文主要介绍了配置Docker国内镜像源及代理设置,以加快镜像拉取速度,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • 详解docker容器分配静态IP

    详解docker容器分配静态IP

    这篇文章主要介绍了详解docker容器分配静态IP,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • 使用Docker容器部署rocketmq单机的全过程

    使用Docker容器部署rocketmq单机的全过程

    这篇文章主要介绍了使用Docker容器部署rocketmq单机,详细介绍了查询镜像拉取镜像的命令,对Docker部署rocketmq相关知识感兴趣的朋友一起看看吧
    2022-04-04
  • Docker实现导入导出镜像(Image)文件的代码示例

    Docker实现导入导出镜像(Image)文件的代码示例

    在 Docker 中,镜像(Image)是容器的基础,包含了应用程序运行所需的所有文件系统和配置,有时,我们需要将 Docker 镜像导出到文件中,以便在其他地方使用,以下将详细介绍如何使用 Docker 导入导出镜像文件,需要的朋友可以参考下
    2024-08-08
  • docker镜像访问本地elasticsearch端口操作

    docker镜像访问本地elasticsearch端口操作

    这篇文章主要介绍了docker镜像访问本地elasticsearch端口操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Docker和Kubernetes中使用代理IP的操作方法

    Docker和Kubernetes中使用代理IP的操作方法

    在Docker和Kubernetes中使用代理IP很容易,只需要在Docker守护进程和容器运行时添加相应的配置即可,这篇文章主要介绍了如何在Docker和Kubernetes中使用代理IP,需要的朋友可以参考下
    2023-07-07
  • docker-desktop启动k8s的详细方法

    docker-desktop启动k8s的详细方法

    这篇文章主要介绍了docker-desktop启动k8s,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08

最新评论