MongoDB主从和分片如何设置鉴权

授权君
• 阅读 3707

前面一篇文章中,我介绍了如何在单台 MongoDB 上设置鉴权,以防范对数据未经授权的访问。本文介绍在配置了主从(Replica Set)和分片(Sharding)的情况下,如何为数据库添加鉴权。这两种情况下的配置方式没有区别,为简单起见,我将它们都称作“多台服务器”。

总的来说,为多台服务器配置鉴权分为三步:

  1. 创建 key 文件;
  2. 通过 key 文件来启动每台服务器;
  3. 创建用户并赋予合适的角色。

创建 key 文件

在单台 MongoDB 上配置鉴权时,我们只需要关心客户端与服务器之间的通信是否安全;而在多台服务器环境下,我们还要关注服务器与服务器之间的通信。

为了保证服务器与服务器之间的通信安全,MongoDB 提供了一种很方便的方式:key 文件。所有的服务器都使用相同内容的 key 文件来验证相互之间的通信,那么只要 key 文件不泄露出去,服务器之间的通信就无法仿冒,可以说是安全的。

key 文件的内容应该随机生成,仅包含 base64 字符集中的字符,空白字符(空格,换行,制表符等)会被忽略。文件大小在 6~1024 字节之间。key 文件的访问权限必须被设置为 600,否则 MongoDB 会报错说没有设置正确的文件权限。

你可以用 vi 或 openssl 命令来生成 key 文件。下面是一个例子:

openssl rand -base64 741 > mongodb-keyfile
chmod 600 mongodb-keyfile

创建好 key 文件后,将其分发到所有服务器上,并保证只有运行 mongodb 的用户能访问该文件。

通过 key 文件来启动每台 MongoDB

服务器的启动顺序不变,区别仅仅是在启动命令里加上 --auth --keyFile mongodb-keyfile 这两个参数。注意不管是 mongod 还是 mongos 都要加上这两个参数。

创建用户并赋予合适的角色

这点参考前面的 “单台MongoDB如何设置鉴权” 即可,使用客户端连上数据库,创建用户,过程完全一样。需要注意的是对于主从数据库你应该连到主数据库上,而对于分片你应该连到 mongos 上。

点赞
收藏
评论区
推荐文章
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
NoSQL之MongoDB
1.mongodb介绍2.mongodb安装3.连接mongodb4.mongodb用户管理5.mongodb创建集合、数据管理6.php的mongodb扩展7.php的mongo扩展8.mongodb副本集介绍9.mongodb副本集搭建10.mongodb副本集测试11.mongodb分片介
Stella981 Stella981
3年前
MongoDB分片(Sharding)技术
分片(sharding)是MongoDB用来将大型集合分割到不同服务器(或者说一个集群)上所采用的方法。尽管分片起源于关系型数据库分区,但MongoDB分片完全又是另一回事。和MySQL分区方案相比,MongoDB的最大区别在于它几乎能自动完成所有事情,只要告诉MongoDB要分配数据,它就能自动维护数据在不同服务器之间的均衡。2.1MongoDB
Wesley13 Wesley13
3年前
MongoDB——主从复制&副本集
MongoDB——主从复制&副本集博客分类:javamongodb前面我说到了,MongoDB数据库支持服务器之间的数据复制。支持主从模式及服务器之间的相互复制。目的当然是实现负载均衡与故障恢复。Mongo中内置了两种技术:主从复制、副本集。下面就简单介绍这两种模式的配置。一、   主从复制主从复制是一个简单的数
Stella981 Stella981
3年前
Spring Cloud微服务架构从入门到会用(五)—服务网关鉴权
上一篇文章我们集成了服务网关SpringCloudGateway,所有的服务请求都可以通过Gateway访问。那我们就可在服务网关这一层对用户的请求进行鉴权,判断是否可以访问路由的API接口。接下来我们开始增加鉴权,这里我们使用jwt1\.创建授权服务module按照第二篇文章创建一个module,起名为appauth。
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
MongoDB 分片搭建
MongoDB已经到了第三篇,同时也是搭建的最后一篇文章了。MongoDB的分片搭建。为什么使用分片?我们为什么要使用分片呢?因为现在的数据量越来越大了,为了扩大DB的性能以及吞吐量。MongoDB分片构架AMongoDB shardedcluster(https://w
Wesley13 Wesley13
3年前
MongoDB学习笔记10——分片
分片(Sharding)这种技术可以将数据分散到多台机器,但对于应用而言,仍然如同在使用单个数据库一样。在使用MongoDB时,水平分区是唯一可采用的方式。在MongoDB中由MongoS路径进程管理数据的分割,并将请求路由到必需的分片服务器。在进行分片的时候需要mongod配置服务器和mongos分片服务器。1)创建分片设置:打开新的终端窗
Stella981 Stella981
3年前
Mongodb集群搭建一篇就够了
本文主要介绍mongodb集群的搭建安装过程,对于学习mongodb的同学很有帮助,包括分片模式、复制集模式、是否启用认证等,本文选取mongodb3.6.3版本为例进行详细安装说明,其他版本搭建过程和本过程一样,只需按照本文说明操作即可。1.Mongodb分片集群架构
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable