docker下安装mongodb

docker下安装mongodb

下载mongo镜像

docker search mongo
# 拉取mongo【这里默认为latest】
docker pull mongo

启动容器

docker run -p 27017:27017 -v /tmp/db:/data/db -d mongo

查看运行中的容器

docker ps
# 进入mongo 【访问admin库】
docker exec -it 4b625fe28e7a2201447a mongo admin

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

注意:MongoDB 默认直接连接,无须身份验证,如果当前机器可以公网访问,且不注意Mongodb 端口(默认 27017)的开放状态,那么Mongodb就会产生安全风险

mongodb auth认证

MongoDB 缺省是没有设置鉴权的,业界大部分使用 MongoDB 的项目也没有设置访问权限。这就意味着只要知道 MongoDB 服务器的端口,任何能访问到这台服务器的人都可以查询和操作 MongoDB 数据库的内容。在一些项目当中,这种使用方式会被看成是一种安全漏洞。

安装完MongoDB服务后默认有一个admin数据库,此时admin数据库是空的,没有记录任何权限相关的信息。当admin.system.users一个用户都没有时,即**使MongoDB启动时添加了–auth参数,如果没有在admin数据库中添加用户,此时不进行任何认证还是可以做任何操作(不管是否以–auth参数启动),直到在admin.system.users中添加一个用户。**因此要开启MongoDB的权限认证需要满足两点条件:

  • admin.system.users中添加用户
  • MongoDB以–auth启动

具体操作如下:

如何开启mongo容器密码认证

思路: docker容器加–auth启动,然后切到admin库,添加管理员账号admin,如果需要添加新库新用户,使用新建的admin用户认证后,再创建新库的新数据库用户。

在运行时,增加–auth参数,示例

docker run -d -p 27017:27017 -v /tmp/db:/data/db   --name mongo  mongo --auth
docker exec -it mongo bash
#进入Mongo
mongo

#切库,  MongoDB自带一个数据库叫admin,可以在这个数据库中创建管理员账号。
use admin;

> db.createUser({user:"admin",pwd:"mongo@2020",roles:[{role: 'root', db: 'admin'}]})
Successfully added user: {
	"user" : "admin",
	"roles" : [
		{
			"role" : "root",
			"db" : "admin"
		}
	]
}
> 
# 认证当前用户管理员(先用刚才创建的账号密码登录,再执行命令)
> db.auth("admin","mongo@2020")
1
> db.getCollectionNames()
[ "system.users", "system.version" ]

#### 举例: 使用新建的admin用户认证后,再创建新库的新数据库用户。 ###
# 创建数据库,这里名字必须是yapi,因为后面指定了roles.db 数据库为yapi
use yapi
# 增加一个yapi管理员账户
db.createUser({
    user: "yapidba",
    pwd: "yapi@2020",
    roles:[
       {
           role:"readWrite",
           db:"yapi"
       }
    ]
})

注意:关于mongo用户认证
mongodb密码和传统数据如mysql等有些区别:

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

mongo与mysql对应:库概念一样,mongo的集合对应mysql的表,mongo的文档对应mysql的行数据。

MongoDB 的用户和权限

MongoDB每个数据库都有自己的用户,创建用户的命令是db.createUser(),当你创建一个用户时,该用户就属于你当前所在的数据库。

每个用户包含三个要素:用户名、密码和角色列表。下面是一个例子:

{  
    user: "dbuser",  
    pwd : "dbpass",  
    roles: ["readWrite", "clusterAdmin"]  
}  

这个例子表示一个名为dbuser的用户,它在当前的数据库中拥有 readWrite 和 clusterAdmin 两个角色。

MongoDB 内置了很多角色,但要注意,不是每个数据库的内置角色都一样。其中 admin 数据库就包含了一些其他数据库所没有的角色。

熟 悉 Oracle 的都知道,数据库用户有两种,一种是管理员,用来管理用户,一种是普通用户,用来访问数据。类似的,**为 MongoDB 规划用户鉴权时,至少要规划两种角色:用户管理员和数据库用户。**如果搭建了分片或主从,可能还会要规划数据库架构管理员的角色,它们专门用来调整数据库的 分布式架构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值