Docker Mongo数据库开启用户认证
一、启动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等有些区别:
- 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
2、进入容器,操作
#进入容器
docker exec -it mongo1 bash #进入Mongo
mongo #切库,新增用户
use admin; db.createUser({ user: "root", pwd: "mongo", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
3、认证验证
方式一,在mongo中可用db.auth()认证
db.auth('root','mongo')
方式二:退出mongo后,重新进入
可以先直接mongo进入,然后show dbs,发现报错
认证进入:mongo admin -u root -p mongo
方式三:Robo客户端工具连接
如果不认证,直接连接测试,提示失败
认证后,重新测试连接:
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客户端连接验证:
到此,就给大家演示了一下,如何对mong开启用户认证~
Docker Mongo数据库开启用户认证的更多相关文章
- Mongo开启用户认证
1. 介绍 由于mongodb默认没有设置密码访问,而且mongodb的访问权限设计,必须使用有权限的用户给每个库设置一个用户,才能使用,且2.X版本与3.X版本区别有点大,所以要注意以下几点. ...
- Spring Security笔记:使用数据库进行用户认证(form login using database)
在前一节,学习了如何自定义登录页,但是用户名.密码仍然是配置在xml中的,这样显然太非主流,本节将学习如何把用户名/密码/角色存储在db中,通过db来实现用户认证 一.项目结构 与前面的示例相比,因为 ...
- Docker Mongo数据库主从同步配置方法
一.具体操作方法 1.启两个Mongo容器 docker run --name mongo1 -p 21117:27017 -d mongo --noprealloc --smallfiles --r ...
- SpringSecurity学习之基于数据库的用户认证
SpringSecurity给我们提供了一套最基本的认证方式,可是这种方式远远不能满足大多数系统的需求.不过好在SpringSecurity给我们预留了许多可扩展的接口给我们,我们可以基于这些接口实现 ...
- EFK教程(5) - ES集群开启用户认证
基于ES内置及自定义用户实现kibana和filebeat的认证 作者:"发颠的小狼",欢迎转载 目录 ▪ 用途 ▪ 关闭服务 ▪ elasticsearch-修改elastics ...
- EFK-5: ES集群开启用户认证
转载自:https://mp.weixin.qq.com/s?__biz=MzUyNzk0NTI4MQ==&mid=2247483826&idx=1&sn=583e9a5260 ...
- openfire 使用已有的数据库作为用户认证数据库 Custom Database Integration Guide
http://download.igniterealtime.org/openfire/docs/latest/documentation/db-integration-guide.html Intr ...
- Docker Mongo数据库主主同步配置方法
一.背景 不多说,请看第一篇<Docker Mongo数据库主从同步配置方法> 二.具体操作方法 1.创建目录,如创建~/test/mongo_sr1和-/test/mongo_sr2两个 ...
- nginx的部署及配置文件的介绍 域名 用户认证 SSL加密模块
步骤一:构建Nginx服务器 yum -y install gcc pcre-devel openssl-devel #安装依赖包 wget http://nginx.org/dow ...
随机推荐
- TFTP Server的搭建和使用(Fedora)
一.tftp服务的安装 yum install xinetd tftp tftp-server 表示我安装的已经是最新版本的tftp服务了,不用更新了. 二.配置tftp服务的相关参数(没有就创建新的 ...
- HDU 4463 Outlets 【最小生成树】
<题目链接> 题目大意: 给你一些点的坐标,要求你将这些点全部连起来,但是必须要包含某一条特殊的边,问你连起这些点的总最短距离是多少. 解题分析: 因为一定要包含那条边,我们就记录下那条边 ...
- 845. Greatest Common Divisor
描述 Given two numbers, number a and number b. Find the greatest common divisor of the given two numbe ...
- 56.两数之和.md
描述 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范围是 0 到 n-1. ...
- 拓扑排序 --- AtCode - 3596
题目链接: https://cn.vjudge.net/problem/1137733/origin 拓扑排序的基本思想: https://blog.csdn.net/qq_41713256/arti ...
- Mybatis的延迟加载和缓存
1. MyBatis中的延迟加载,也称为懒加载,是指在进行关联查询时,按照设置延迟加载规则推迟对关联对象的select查询.延迟加载可以有效的减少数据库压力. 注意:MyBatis的延迟加 ...
- (转)JavaWeb学习之Servlet(三)----Servlet的映射匹配问题、线程安全问题
[声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140529.html 一.Servlet映射匹配问题: 在第一篇文章中的 ...
- BZOJ4218 : 不知道高到哪里去了
设$degi[x]$和$dego[x]$分别表示每个点的入度和出度,将线性规划的限制写出来: 目标函数: $\max.\ \sum_{x=1}^n(dego[x]P[x]-degi[x]Q[x])$ ...
- Django构建简介
MVC框架 MVC:Model View Controller,是软件工程中的一种软件构架模式,把软件系统分为三个基本模型,具有耦合性低.重用性高.生命周期成本低等优点 Model:模型,操作数据库 ...
- Java WebSocket 线程安全的保证
Java WebSocket线程安全基于3点: 1 在新的客户端连接时,WebSocket容器会创建一个新的端点实例,对应的会话实例表示从唯一的客户端到该端点实例的唯一连接. 2 每个WebSocke ...