Docker Mongo数据库开启用户认证

时间:2023-01-16 13:39:08

一、启动mongo容器的几种方式

#简化版
docker run --name mongo1 -p 21117:27017 -d mongo --noprealloc --smallfiles #自定义mongo数据路径
docker run --name mongo_rs1 -v ~/test/mongo_sr1:/mongodb -p 37117:27017 -d mongo mongod --logpath /mongodb/mongo.log --logappend --dbpath /mongodb #开启mongo双主配置
docker run --name mongo_rs2 -v ~/test/mongo_sr2:/mongodb -p 37118:27017 -d mongo mongod --logpath /mongodb/mongo.log --logappend --dbpath /mongodb --master --slave --port=27017 --autoresync --source=192.168.118.73:37117 #常规,用mongo默认数据路径,并挂载出来
docker run --name mongodb_alpha -d --dns=192.168.1.26 -p 37017:27017 -v /home/devsa_dev/mongo_data/configdb:/data/configdb -v /home/devsa_dev/mongo_data/db:/data/db mongo

而按照上述几种方式启动的Mongo容器,默认是不带密码访问的,也就是说,只有别人知道你的ip和映射出来的端口,即可操作你的mongo数据库

二、如何开启mongo容器密码认证

在运行时,增加--auth参数,用简化版来作为示例

docker run --name mongo1 -p 21117:27017 -d mongo --noprealloc --smallfiles --auth

三、关于mongo用户认证

mongodb密码和传统数据如mysql等有些区别:

  1. mongodb的用户名和密码是基于特定数据库的,而不是基于整个系统的。所有所有数据库db都需要设置密码

mongodb设置管理用户和密码:

show dbs
在mongodb新版本里并没有admin数据库,但是并不妨碍第2步操作。
#进入admin数据库
use admin 
#创建管理员账户
db.createUser({ user: "useradmin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] }) mongodb中的用户是基于身份role的,该管理员账户的 role是 userAdminAnyDatabase。 ‘userAdmin’代表用户管理身份,’AnyDatabase’ 代表可以管理任何数据库。 #验证第3步用户添加是否成功
db.auth("useradmin", "adminpassword") 如果返回1,则表示成功。

进入mongodb,用第3步的 管理员账户登录,用该账户创建其他数据库管理员账号

use admin
db.auth("useradmin", "adminpassword")

新建你需要管理的mongodb 数据的账号密码

use yourdatabase

db.createUser({ user: "youruser", pwd: "yourpassword", roles: [{ role: "dbOwner", db: "yourdatabase" }] })

注:dbOwner 代表数据库所有者角色,拥有最高该数据库最高权限。

新建数据库读写账户

use yourdatabase
db.createUser({ user: "youruser2", pwd: "yourpassword2", roles: [{ role: "readWrite", db: "yourdatabase" }] })

注:该用户用于该数据的读写,只拥有读写权限。

内建角色

  • Read:允许用户读取指定数据库
  • readWrite:允许用户读写指定数据库
  • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
  • userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
  • clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
  • readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
  • readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
  • userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
  • dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
  • root:只在admin数据库中可用。超级账号,超级权限
 

Mongodb 用户验证登陆

第一种 (类似 MySql)

客户端连接时,指定用户名,密码,db名称

mongo --port 27017 -u "adminUser" -p "adminPass" --authenticationDatabase "admin"

第二种
客户端连接后,再进行验证

mongo --port 27017

use admin
db.auth("adminUser", "adminPass")
// 输出 1 表示验证成功

第三种:

进入容器中
mongo admin -u username -p passwd

URI 形式的访问

生产中常用 URI 形式对数据库进行连接

mongodb://your.db.ip.address:27017/foo

添加用户名密码验证

mongodb://simpleUser:simplePass@your.db.ip.address:27017/foo

实例:

#形式一
connect(host='mongodb://root:mongo@172.20.10.144:37017/ppmoney_website_minder')
#形式二
connect(host='mongodb://root:mongo@172.20.10.144:37017/db?authSource=ppmoney_website_minder')

四、实例演示

啥?你还不会,那我接下来,给大家演示一下吧

1、新建容器,并开启--auth

docker run --name mongo1 -p 21117:27017 -d mongo --noprealloc --smallfiles --auth

Docker Mongo数据库开启用户认证

2、进入容器,操作

#进入容器
docker exec -it mongo1 bash #进入Mongo
mongo #切库,新增用户
use admin; db.createUser({ user: "root", pwd: "mongo", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })

Docker Mongo数据库开启用户认证

3、认证验证

方式一,在mongo中可用db.auth()认证

db.auth('root','mongo')

方式二:退出mongo后,重新进入

可以先直接mongo进入,然后show dbs,发现报错

Docker Mongo数据库开启用户认证

认证进入:mongo admin -u root -p mongo

Docker Mongo数据库开启用户认证

方式三:Robo客户端工具连接

如果不认证,直接连接测试,提示失败

Docker Mongo数据库开启用户认证

认证后,重新测试连接:

Docker Mongo数据库开启用户认证

4、再来新建一个其它数据库的用户

#新建库
use ppmoney_website_minder #新建用户
db.createUser(
... {
... user: "root",
... pwd: "mongo",
... roles: [ { role: "readWrite", db: "ppmoney_website_minder" }, ]
... }
... ) #认证
db.auth('root','mongo') #插入数据
db.runoob.insert({"name":"ppmoney_website_minder"})

用Mongo客户端连接验证:

Docker Mongo数据库开启用户认证

到此,就给大家演示了一下,如何对mong开启用户认证~

Docker Mongo数据库开启用户认证的更多相关文章

  1. Mongo开启用户认证

      1. 介绍 由于mongodb默认没有设置密码访问,而且mongodb的访问权限设计,必须使用有权限的用户给每个库设置一个用户,才能使用,且2.X版本与3.X版本区别有点大,所以要注意以下几点. ...

  2. Spring Security笔记:使用数据库进行用户认证(form login using database)

    在前一节,学习了如何自定义登录页,但是用户名.密码仍然是配置在xml中的,这样显然太非主流,本节将学习如何把用户名/密码/角色存储在db中,通过db来实现用户认证 一.项目结构 与前面的示例相比,因为 ...

  3. Docker Mongo数据库主从同步配置方法

    一.具体操作方法 1.启两个Mongo容器 docker run --name mongo1 -p 21117:27017 -d mongo --noprealloc --smallfiles --r ...

  4. SpringSecurity学习之基于数据库的用户认证

    SpringSecurity给我们提供了一套最基本的认证方式,可是这种方式远远不能满足大多数系统的需求.不过好在SpringSecurity给我们预留了许多可扩展的接口给我们,我们可以基于这些接口实现 ...

  5. EFK教程(5) - ES集群开启用户认证

    基于ES内置及自定义用户实现kibana和filebeat的认证 作者:"发颠的小狼",欢迎转载 目录 ▪ 用途 ▪ 关闭服务 ▪ elasticsearch-修改elastics ...

  6. openfire 使用已有的数据库作为用户认证数据库 Custom Database Integration Guide

    http://download.igniterealtime.org/openfire/docs/latest/documentation/db-integration-guide.html Intr ...

  7. Docker Mongo数据库主主同步配置方法

    一.背景 不多说,请看第一篇<Docker Mongo数据库主从同步配置方法> 二.具体操作方法 1.创建目录,如创建~/test/mongo_sr1和-/test/mongo_sr2两个 ...

  8. nginx的部署及配置文件的介绍 域名 用户认证 SSL加密模块

    步骤一:构建Nginx服务器 yum -y install gcc pcre-devel openssl-devel        #安装依赖包 wget   http://nginx.org/dow ...

  9. 如何创建一个 mongo 数据库并为它添加一个认证用户?

    0.登录 admin 库,开启一个 mongo shell mongo --port 27017 -u "adminUser" -p "adminPass" - ...

随机推荐

  1. 2&period;6 C&num;的标识符命名规则

    C#标识符的命名规则 程序中的变量名.常量名.类名.方法名,都叫做标识符.C#有一套标识符的命名规则,如果命名时不遵守规则,就会出错.这套规则简单说有下面三条: ①标识符只能由英文字母.数字和下划线组 ...

  2. ASP&period;NET 多语言的实现(后台消息&plus;前台消息&plus;页面自动绑定)

    一 前言 界面支持多种语言,在使用ASP.NET自带的多语言方案时遇到下列问题: 在做管理类的功能时,有添加.修改和查看页面,需要支持多语言的控件基本相同,但要维护多处,产生冗余(ASP.NET有共享 ...

  3. Activity有四种加载模式&lpar;转&rpar;

    Activity有四种加载模式: standard singleTop singleTask singleInstance 在多Activity开发中,有可能是自己应用之间的Activity跳转,或者 ...

  4. Sql server存储过程中常见游标循环用法

    用游标,和WHILE可以遍历您的查询中的每一条记录并将要求的字段传给变量进行相应的处理 DECLARE ), ), @A3 INT DECLARE YOUCURNAME CURSOR FOR SELE ...

  5. HTML5——单次定位请求

    单次定位请求及点击一次只发出一次请求 下面是个获取经纬度的简单Demo 简要截图如下: 简要代码如下: <!DOCTYPE html> <html> <head> ...

  6. 原创Java版的Shell

    如果你接触过windows操作系统,你应该对windows中的cmd有一定的了解. 如果你接触过Linux操作系统,你应该对Linux的shell有一定的了解. 本文说的正是linux中的shell. ...

  7. Json 入门例子【2】

    <script> var json1 = { "id": 1, "tagName": "apple" }; $("#f ...

  8. 自己定义View----点击滑动选择字母列表

    因为项目须要,也不想使用网上的写好的控件,于是作死的自己定义了一个控件.特此记录下成功.效果例如以下: 首先须要把全部的字母绘制出来: private static String letters[] ...

  9. iOS开发网络数据之AFNetworking使用 分类: ios技术 2015-04-03 16&colon;35 105人阅读 评论&lpar;0&rpar; 收藏

    http网络库是集XML解析,Json解析,网络图片下载,plist解析,数据流请求操作,上传,下载,缓存等网络众多功能于一身的强大的类库.最新版本支持session,xctool单元测试.网络获取数 ...

  10. 关闭Sublime Text的自动更新的方法

    每次打开Sublime text 软件都会提示我让我更新软件,如图: 经过仔细的研究发现可以通过以下途径关闭软件的自动更新 打开Submine Text,找到Preferences -> Set ...