MongoDB安全策略
一,修改启动端口
mongo的默认端口为27017 如果启用的是27017端口并且在公网上很容易被人攻击,所以第一点我们要修改端口
sudo ./mongod --dbpath=/data/db --fork --port 29089 --logpath=/data/logs
我们现在启动的是29089端口
启动shell
$ ./mongo

报错:
Failed to connect to 127.0.0.1:27017, reason: errno:61 Connection refused
这是是因为我们修改了端口,而默认连接的是27017的端口,所以我们进入shell时也要指定启动服务似的端口
$ ./mongo --port 29089
这样就可以进入了

二,用户认证
mongodb默认是没有管理账户的,需要开发人员添加管理员账户,在启动mongo服务时添加身份认证才可以进入数据库,所以我们需要做两点:
- 添加管理员
- 启动服务时时添加 auth 指令
mogodb 默认有两个数据库:
在我们初次安装并启动mongo服务后,进入shell管理可以看到已存在两个数据库,在执行show dbs时 会显示以下两个数据库
- admin
- local
我们要在admin里添加用户以便在进入数据库时认证,我是在mac下操作,以下都是mac下的命令,下面演示整个用户添加和认证的过程
1.检查mongo服务是否开启
$ ps -ef | grep mongo

未找到mongo启动进程
2.启动mongo服务
$ cd /usr/local/bin
$ ./mongod --dbpath=/data/db --fork --port 29089 --logpath=/data/logs

成功启动mongo
3.进入shell管理后台
$ cd /usr/local/bin
$ ./mongo --port 29089

4.查看当前所有数据库
$ show dbs

除了admin,local数据库其他都是我业务上使用后建立的数据库,可以看到我们直接就访问到数据库并且可以操作
5.在admin库里添加管理员用户
$ use admin
$ db.getUsers();

使用admin数据库并检查是否存在用户
6 创建用户
$ db.createUser({user:"leinov",pwd:"123456",roles:["root"]})
db.getUsers();

db.createUser()创建一个用户,并分配角色,我们创建里一个超级管理员,这个角色可以对本机mongo实例内的所有数据库做有效的读写操作,关于db.createUser()方法参考官方文档 https://docs.mongodb.com/manual/reference/method/db.auth/
7 重新启动服务并添加认证auth
$ sudo ./mongod --dbpath=/data/db --fork --port 29089 --logpath=/data/logs --auth
在启动命令后面加上auth这样在进入数据库时就会开启认证
8.重新进入shell后台
$ ./mongo--port29089
$ show dbs

提示没有权限查看数据库list
9.切换到admin数据库验证
$ use admin
$ db.auth({user:"leinov",pwd:"123456"})
db.auth()方法是验证用户的操作方法,返回值为0/1 1为验证成功
10.再次查看数据库
$ show dbs

完成端口修改和用户认证基本上就可以保证数据库的安全了,我自己的mongo也被黑了,网上其实还有很多裸奔的mongo数据库,所以一定要给自己的mongo修改端口添加用户认证保证安全。

3.0后的mongo很多方法都有变化,具体参考官方文档 https://docs.mongodb.com/
MongoDB安全策略的更多相关文章
- NoSQL与MongoDB介绍
写在前面 本文是由一次演讲整理出来的,文中大部分资料来源于网络,感谢Wikipedia,Google和MongoDB官网.文中使用的MongoDB版本为1.2.4. What is NoSQL NoS ...
- CentOS MongoDB 高可用实战
原文:https://www.sunjianhua.cn/archives/centos-mongodb.html 一.MongoDB 单节点 1.1.Windows 版安装 1.1.1 获取社区版本 ...
- 【Mongodb教程 第十六课 】 分享NO-SQL开发实战
最近研究了一下NOSQL,现整理目录如下: 一.关系数据库的瓶颈: 二.NOSQL概述: 三.NOSQL中的热门数据库MongoDB介绍及安装配置: 四.MongoDB开发模式及实战: 一.关系数据库 ...
- MongoDB最佳安全实践
在前文[15分钟从零开始搭建支持10w+用户的生产环境(二)]中提了一句MongoDB的安全,有小伙伴留心了,在公众号后台问.所以今天专门开个文,写一下关于MongoDB的安全. 一.我的一次Mong ...
- MongoDB中如何优雅地删除大量数据
删除大量数据,无论是在哪种数据库中,都是一个普遍性的需求.除了正常的业务需求,我们需要通过这种方式来为数据库"瘦身". 为什么要"瘦身"呢? 表的数据量到达一定 ...
- 【翻译】MongoDB指南/聚合——聚合管道
[原文地址]https://docs.mongodb.com/manual/ 聚合 聚合操作处理数据记录并返回计算后的结果.聚合操作将多个文档分组,并能对已分组的数据执行一系列操作而返回单一结果.Mo ...
- 【翻译】MongoDB指南/CRUD操作(四)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...
- 【翻译】MongoDB指南/CRUD操作(三)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(三) 主要内容: 原子性和事务(Atomicity and Transactions),读隔离.一致性和新近 ...
- 【翻译】MongoDB指南/CRUD操作(二)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...
随机推荐
- 流畅的python学习笔记第七章:装饰器
装饰器就如名字一样,对某样事物进行装饰过后然后返回一个新的事物.就好比一个毛坯房,经过装修后,变成了精装房,但是房子还是同样的房子,但是模样变了. 我们首先来看一个函数.加入我要求出函数的运行时间.一 ...
- eclipse左侧的导航栏不见了怎么调
点击eclipse上方导航栏的window 然后再点击Reset Perspective 这样左侧的导航栏就出来了
- 去掉CI框架默认url中的index.php
1:.htaccess //放置在根目录下,和入口文件index.php的同级目录<IfModule mod_rewrite.c>RewriteEngine onRewriteCond % ...
- 亲测有效!一种完美动态阈值白平衡算法 Java实现。
几年没发文了,重新拿起技术! 最近做图像处理,要自动处理颜色平衡问题,很多什么直方图优化之类的,都不完美.所以在博客园找到了这个前辈的文章. http://www.cnblogs.com/Images ...
- c#面向对象-类(类及其构成)
学习c#已经快一个学期,在这一段时间里,通过自己的努力和老师指导,自己感觉收获颇丰,所以我想把自己学到东西整理一下,供大家点评!若有错误或不当之处,敬请指出. 今天,我先从类及其构成说起! 1. ...
- accp8.0转换教材第7章JavaScript操作DOM对象理解与练习
程序调试,chrome开发人员工具,DOM操作,节点和节点间的关系,节点信息,操作节点,获取元素 一.单词部分 ①alert警告②prompt提示③parentNode父节点④childNode子节点 ...
- 使用Homebrew配置Java开发环境
查询java brew cask search java 查看版本信息 brew cask info java 从官网下载并安装 JDK 8 brew cask install java 需要安装 J ...
- Java 中基本类型和字符串之间的转换
Java 中基本类型和字符串之间的转换 在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换. 其中,基本类型转换为字符串有三种方法: 1. 使用包装类的 toString() 方法 2. 使 ...
- webpack认识
1 webpack是什么? CommonJS和AMD是用于JavaScript模块管理的两大规范,前者定义的是模块的同步加载,主要用于NodeJS:而后者则是异步加载,通过requirejs等工具适用 ...
- 一颗简单的hibernate栗子
Hibernate是一个开源的ORM框架,顾名思义,它的核心思想即ORM(Object Relational Mapping,对象关系映射),可以通过对象来操作数据库中的信息,据说开发者一开始是不太熟 ...
