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

发布时间:2017-04-02 21:13 来源:互联网 当前栏目:web技术类

基于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_1docker-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.12connecting to: admin

(2)授权登录admin

db.auth("mongo-admin","admin-initial-password")

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

# 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"#    }#  ]#}
        
 
  • 1、
  • 2、
  • 3、
  • 4、
  • 5、
  • 6、
  • 7、
  • 8、
  • 9、
  • 10、
  • 11、
  • 12、
  • 13、
  • 14、
  • 15、
  • 16、
  • 17、
  • 18、
  • 19、
  • 20、
  • 21、
  • 22、
  • 23、
  • 24、
  • 25、
  • 1、
  • 2、
  • 3、
  • 4、
  • 5、
  • 6、
  • 7、
  • 8、
  • 9、
  • 10、
  • 11、
  • 12、
  • 13、
  • 14、
  • 15、
  • 16、
  • 17、
  • 18、
  • 19、
  • 20、
  • 21、
  • 22、
  • 23、
  • 24、
  • 25、