默认的mongodb是不设置认证的。只要ip和端口正确就能连接,这样是不安全的。mongodb官网上也说,为了能保障mongodb的安全可以做以下几个步骤:

1、使用新的端口,默认的27017端口如果一旦知道了ip就能连接上,不太安全

2、设置mongodb的网络环境,最好将mongodb部署到公司服务器内网,这样外网是访问不到的。公司内部访问使用vpn等

3、开启安全认证。认证要同时设置服务器之间的内部认证方式,同时要设置客户端连接到集群的账号密码认证方式

所以我们需要手动去添加用户,以便可以更加安全的进行访问,在没添加用户验证之前,通过mongos进入数据库时会有如下的警告:

开启分片集群的权限验证

对副本集执行访问控制需要配置两个方面:

1、副本集和共享集群的各个节点成员之间使用内部身份验证,可以使用密钥文件或x.509证书。密钥文件比较简单,本文介绍的也是使用密钥文件,官方推荐如果是测试环境可以使用密钥文件,但是正是环境,官方推荐x.509证书。原理就是,集群中每一个实例彼此连接的时候都检验彼此使用的证书的内容是否相同。只有证书相同的实例彼此才可以访问

2、使用客户端连接到mongodb集群时,开启访问授权。对于集群外部的访问。如通过可视化客户端,或者通过代码连接的时候,需要开启授权。

1、生成密钥文件。
    1.1在keyfile身份验证中,副本集中的每个mongod实例都使用keyfile的内容作为共享密码,只有具有正确密钥文件的mongod或者mongos实例可以连接到副本集。密钥文件的内容必须在6到1024个字符之间,并且在unix/linux系统中文件所有者必须有对文件至少有读的权限。

1.2可以用任何方式生成密钥文件例如:

openssl rand -base64 756 > /opt/mongodb/security/KeyFile.file
chmod 600 /opt/mongodb/security/testKeyFile.file

第一条命令是生成密钥文件,第二条命令是使用chmod更改文件权限,为文件所有者提供读权限,一定要保证密钥文件一致。文件位置随便。但是为了方便查找,建议每台机器都放到一个固定的位置。我的配置文件都放在/opt/mongodb/securitytestKeyFile.file

预先创建好一个管理员账号和密码然后将集群中的所有mongod和mongos全部关闭

账号可以在集群认开启认证以后添加。但是那时候添加比较谨慎。只能添加一次,如果忘记了就无法再连接到集群。建议在没开启集群认证的时候先添加好管理员用户名和密码然后再开启认证再重启

连接任意一台机器的mongos,建立一个拥有添加删除用户权限的账号

use admin   //注意一定要使用admin数据库
db.createUser({user:"bfd",pwd:"123456",roles: [ { role: "userAdminAnyDatabase",db:"admin"}]
}) 

这里就添加了一个bfd这么一个用户,他可以进行所有数据库的用户管理。在添加这个用户后,我们连接mongodb时仍然不需要进行登录,这是因为我们未在配置中开启权限验证。

然后依次连接到每一台机器上执行,之前介绍过正确关闭mongodb服务,是进入交互端,执行 db.shutdownServer()关闭服务。

killall mongod
killall mongos

说明:可以先开启认证重启后再添加用户。但是只能在admin库添加一次,所以如果忘记了,或者权限分配不恰当就无法再更改,所以建议先添加用户再开启认证重启,并且集群不建议在每个单节点添加用户,并且建议单节点关闭初始添加账号的权限,详情见enableLocalhostAuthBypass)

依次在每台机器上的mongod的配置文件中加入下面一段配置。如我在172.18.1.23上的config server,shard1,shard2,shard3都加入下面的配置:

#开启权限验证
security:keyFile: /opt/mongodb/security/keyFile.file  authorization: enabled

依次在每台机器上的mongos配置文件中加入下面一段配置。如我在172.18.1.23上的mongos配置文件中加入上面的一段配置

security:keyFile: /data/mongodb/testKeyFile.file

解释:
    mongos比mongod少了authorization:enabled的配置。原因是,副本集加分片的安全认证需要配置两方面的,副本集各个节点之间使用内部身份验证,用于内部各个mongo实例的通信,只有相同keyfile才能相互访问。所以都要开启keyFile: /opt/mongodb/security/testKeyFile.file

然而对于所有的mongod,才是真正的保存数据的分片。mongos只做路由,不保存数据。所以所有的mongod开启访问数据的授权authorization:enabled。这样用户只有账号密码正确才能访问到数据

重启每个mongo示例。因为我的认证配置在了配置文件里面,所以启动命令不需要再加认证的参数 (例如--auth等)

numactl --interleave=all mongod -f /opt/mongodb/config/configsvr.conf
numactl --interleave=all mongod -f /opt/mongodb/config/shard1.conf
numactl --interleave=all mongod -f /opt/mongodb/config/shard2.conf
numactl --interleave=all mongod -f /opt/mongodb/config/shard3.conf
numactl --interleave=all mongos-f /opt/mongodb/config/mongos.conf

依次重启三台机器的mongod和mongos实例

连接mongodb集群

[bfd@bfd-yiz-1p23 /opt/mongodb]$ mongo --port 27017
MongoDB shell version v4.0.4
connecting to: mongodb://127.0.0.1:27017/
Implicit session: session { "id" : UUID("8906ec80-d7d1-4f14-ac1d-97e3ae6c94cd") }
MongoDB server version: 4.0.4
mongos> use admin
switched to db admin
mongos>
mongos> db.auth("bfd","123456")
1

如果返回1表示连接成功

mongodb分片集群数据库安全认证相关推荐

  1. MongoDb分片集群认证

    本文主要基于已经搭建好的未认证集群,结合上篇Mongodb副本集分片集群模式环境部署(https://www.cnblogs.com/woxingwoxue/p/9875878.html), Mong ...

  2. 实战:MongoDB 分片集群Shard Cluster 搭建(1台路由节点,3台配置节点,9台分片节点)

    MongoDB 分片集群搭建(分片集群安全认证+SpringBoot访问) 一.搭建要求 一台路由节点 IP地址:192.168.80.110 端口:11111 三套复制集(每个分片节点中的复制集 都 ...

  3. 搭建MongoDB分片集群

    在部门服务器搭建MongoDB分片集群,记录整个操作过程,朋友们也可以参考. 计划如下: 用5台机器搭建,IP分别为:192.168.58.5.192.168.58.6.192.168.58.8.19 ...

  4. mongodb 启动_精心总结--mongodb分片集群启动与关闭

    概述 网上教程有点坑啊,很多bug,今天刚好涉及到所以抽空整理了下mongodb分片集群启动与关闭方面的教程.希望对大家有点帮助. 基础环境配置 192.168.240.145 测试Nosql服务器1 ...

  5. DOCKER-COMPOSE搭建MONGODB分片集群(单机版)

    docker-compose搭建mongodb分片集群(单机版) - 丰哥坑到 - 博客园

  6. MongoDB——MongoDB分片集群(Sharded Cluster)两种搭建方式

    MongoDB分片集群(Sharded Cluster)两种搭建方式 MongoDB分片的概念 分片集群包含的组件 分片集群架构目标 MongoDB分片集群搭建 第一套副本集 第二套副本集 配置节点副 ...

  7. 2021-05-12 MongoDB面试题 什么是MongoDB分片集群

    什么是MongoDB分片集群? Sharding cluster是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建.sharding分片很好的解决了单台服务器磁盘空 ...

  8. TiDB和MongoDB分片集群架构比较

    此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 最近阅读了TiDB源码的说明文档,跟MongoDB的分片集群做了下简单对比. 首先展示TiDB的整体架构 M ...

  9. mongodb分片集群突然停电造成一些错误,分片无法启动

    今天突然停电使mongodb分片集群造成这种错误,暂时不知道怎么解决,如果 有人知道请回复我 ,现在把记录下来,等后期处理. Fri Aug  8 10:49:52.165 [initandliste ...

  10. mongodb 分片集群安装 -- 二进制文件安装

    一.安装前准备 机器分配: 三台机器 A :192.168.19.101 B: 192.168.19.102 C: 192.168.19.103 A机器:mongos .config server.s ...

最新文章

  1. dataframe两个表合并_史上代码最少的工作表拆分,仅需5行,不可思议
  2. Ubuntu12.04下arm交叉编译环境的建立
  3. celery定时任务简单使用
  4. ActionTileViewController.js
  5. Scala学习:Curry化的函数
  6. 作者:李海生(1974-),男,博士,食品安全大数据技术北京市重点实验室、北京工商大学计算机与信息工程学院教授、研究生导师...
  7. graphql java demo_GraphQL学习,Java简单实现
  8. Hash Collision DoS 攻击
  9. 两个无线AP导致的网络故障
  10. Java 图片处理解决方案:ImageMagick 快速入门教程
  11. C++进阶之函数模板
  12. php鲜花销售管理系统论文,鲜花销售系统论文
  13. Linux驱动里的wmb函数
  14. C语言编程>第八周 ③ 请编写一个函数void fun(char orig[],char result[],int flg),其功能是:删除一个字符串中指定下标的字符。其中,orig指向……
  15. 经验:中小微企业网站上云怎样选择适合自己的云虚拟主机?
  16. 售后的设计(退换货)
  17. 人类与计算机之间的围棋,棋圣怒吼:别忽悠我 电脑不可能战胜人类
  18. -XX:CMSInitiatingOccupancyFraction
  19. 蓝桥杯: Cowboys
  20. En-Tan-Mo答社区用户问

热门文章

  1. Android中Style详解
  2. java fop_java – 未找到类FOP
  3. 计算机linux认证-1,Linux认证:Linux点评Debian5个五功能
  4. 苹果奖学金获得者:我的自学 iOS 开发历程
  5. QuantLib 金融计算——基本组件之 ExchangeRate 类
  6. CTeX 中文 beamer 模板
  7. C语言程序设计苏小红课后习题答案7.14.5
  8. WIN7中修改Jar文件打开方式的方法
  9. 【TAGE】分支预测
  10. App Store自动下载WiFi与蜂窝数据切换机制