之前我有一篇博客写的是“node.js通过权限验证连接MongoDB”,这篇博客上提到如何在启动文件中通过配置auth参数来开启权限认证,但这种认证方式只适合单机节点,当我们使用复制集时应该怎么开启权限认证来保证复制集的安全捏? 
先给大家看一下我在centos虚拟机上搭建的复制集 
 
这和我之前的那篇博客上展示的不是同一个复制集,因为昨天我在原来那台虚拟机上瞎几把搞的时候改错了一个配置文件然后系统就GG了。。。。。于是今天我又重新装了一遍。 
上面展示的五个文件夹分别是五个数据库的安装路径,文件夹名后面的数字是端口号。27017是priority最高的一个,27018、27019为普普通通的节点,27020为延时300秒的从节点,27021为投票节点。 
那么要开启复制集的安全认证首先需要关闭全部节点,而且在此之前不应该对某个节点使用单机节点的认证方式,即不可以在某个节点的启动文件中配置auth=true且在该节点里创建用户。因为这样子做只适合单机节点,在复制集中这样做会导致该节点发现不了复制集中的其他节点,因为没有权限访问。复制集的安全认证需要通过配置keyfile文件的方式进行。 
接下来我们需要在每个节点的安装路径下新建一个keyFile文件,文件中的具体内容其实就是一行字符串,但复制集对keyFile文件有所要求 
1.内容:以base64编码集中中的字符进行编写,即字符串只能包含a-z、A-Z、+、/ 
2.长度不能超过1000字节 
3.权限最多到600 
那么如何高效且高逼格生成一个合适的keyFile文件呢? 
有这样一个方法分享给大家,我们在mongo27017中执行下面的操作 
 
这里需要注意一下在第一次输出的时候我们需要检查它输出的字符串中是否有不是baase64的字符。第二行命令是把上面生成的字符串输入到keyFile中。由于之前所说,复制集对keyFile的权限有要求,最多到600,所以我们需要

chmod 600 keyFile
  • 1

然后我们把这个文件复制到其他节点的安装路径中。 
然后我们到启动文件中配置参数 
 
这里我们需要注意最后一个参数keyFile,其值为之前我们生成的keyFile文件的地址。由于我们配置了keyFile参数相当于就开启了安全认证,所以就不必在配置auth参数了。 
最后我们再启动复制集,在主节点中创建用户,第一个创建的用户必须在admin库中创建,创建方式如下 
 
之后不管在主节点还是从节点中,我们都需要在admin库中通过db.auth()进行认证 
 
以上就是配置复制集安全认证的全部过程,后面我将为大家介绍如何通过nodejs连接复制集。

=================================================================================

四、     增加安全认证机制KeyFile

4.1 集群之间的安全认证

集群之间的复制增加keyFile认证

#生成key

openssl rand -base64 745 > /data/mongo_set/usercenter/30010/mongodb-keyfile

chmod 600 /data/mongo_set/usercenter/30010/mon-keyfile

# 该key的权限必须是600

将该key放到集群中机器的每一台上,记住必须保持一致,权限设置成600;

4.2 修改配置

在mongodb.conf启动配置文件中增加配置项

#安全认证机制

keyFile=/data/mongo_set/test_set/30010/mon-keyfile

4.3 主库配置用户

也可后面配置,开启keyfile认证就默认开启了auth认证了,为了保证后面可以登录,我提前创建了用户:

先创建管理员账户

db.createUser(

{

user:"admin",

pwd:"xxxxxx",

roles:[{role:"userAdminAnyDatabase",db:"admin"}]

}

);

db.createUser( {

user: "root",

pwd: "xxxxxxx",

roles: [ { role: "root", db: "admin" } ]

});

#认证用户

db.auth("admin","xxxxxxx")

db.auth("root","xxxxxxx")

4.4 重启进入

重新启动mongodb,记住重新启动时候,keyfile的指定如果没有在配置文件中配置,就必须启动时候使用参数keyfile指定,关闭顺序注意下,mongodb集群有自动切换主库功能,如果先关主库,主库就切换到其它上面去了,这里预防主库变更,从库关闭后再关闭主库。

mongo 10.10.1.163:30010/admin -u root –p

2017-03-10T20:08:32.116+0800 I CONTROL  [initandlisten]

test_set:PRIMARY> use admin

switched to db admin

重新查看从库和集群状态都是正常。

五、     创建用户和用户数据库

5.1 启动认证

开启了安全认证就可以开始对每个数据库进行安全认证了,首先给用户创建一个数据库:

test_set:PRIMARY> use user_test

switched to db user_test

mongodb创建数据库直接use即可,此时show dbs是看不到该库的,需要插入一条数据才会现实出来,这里不演示;

创建用户数据库的用户:

db.createUser(

{

user: “test_user",

pwd: "xxxxxx",

roles: [ { role: "readWrite", db: "user_test" } ]

}

);

创建完成会显示成功,可以用db.system.users.find()查看所有用户验证用户是否存在;

5.2 验证用户登录

#client操作

mongo 10.10.1.163:30010/user_test –u user_test –p

MongoDB shell version v3.4.2

Enter password:

connecting to: mongodb://192.168.1.163:30010/user_center

MongoDB server version: 3.4.2

user_test:PRIMARY>

转自:https://blog.csdn.net/wopelo/article/details/73004216

mongodb复制集开启安全认证的更多相关文章

  1. MongoDB复制集的工作原理介绍(二)

    复制集工作原理 1)数据复制原理 开启复制集后,主节点会在 local 库下生成一个集合叫 oplog.rs,这是一个有限集合,也就是大小是固定的.其中记录的是整个mongod实例一段时间内数据库的所 ...

  2. 关于 MongoDB 复制集

    为什么要使用复制集 1.备份数据通过自带的 mongo_dump/mongo_restore 工具也可以实现备份,但是毕竟没有复制集的自动同步备份方便. 2.故障自动转移部署了复制集,当主节点挂了后, ...

  3. spring mongodb 复制集配置(实现读写分离)

    注:mongodb当前版本是3.4.3   spring连接mongodb复制集的字符串格式: mongodb://[username:password@]host1[:port1][,host2[: ...

  4. MongoDB复制集成员及架构介绍(一)

    MongoDB复制集介绍 MongoDB支持在多个机器中通过异步复制达到提供了冗余,增加了数据的可用性.MongoDB有两种类型的复制,第一种是同于MySQL的主从复制模式(MongoDB已不再推荐此 ...

  5. 02 . MongoDB复制集,分片集,备份与恢复

    复制集 MongoDB复制集RS(ReplicationSet): 基本构成是1主2从的结构,自带互相监控投票机制(Raft(MongoDB)Paxos(mysql MGR 用的是变种)) 如果发生主 ...

  6. MongoDB 复制集 (一) 成员介绍

       一 MongoDB 复制集简介          MongoDB的复制机制主要分为两种:          Master-Slave    (主从复制)      这个已经不建议使用       ...

  7. mongodb 复制集

    mongodb 复制集 复制集简介 Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写 ...

  8. Raft与MongoDB复制集协议比较

    在一文搞懂raft算法一文中,从raft论文出发,详细介绍了raft的工作流程以及对特殊情况的处理.但算法.协议这种偏抽象的东西,仅仅看论文还是比较难以掌握的,需要看看在工业界的具体实现.本文关注Mo ...

  9. MongoDB复制集

    1.1 MongoDB复制集简介 一组Mongodb复制集,就是一组mongod进程,这些进程维护同一个数据集合.复制集提供了数据冗余和高等级的可靠性,这是生产部署的基础. 1.1.1 复制集的目的 ...

随机推荐

  1. Python(socket编程——2)

    import socket ''' socket.socket(socket_family,socket_type,protocal=0) socket_family 可以是 AF_UNIX 或 AF ...

  2. The Cheap KD 10 is my best shoe yet

    10 years of anything is fairly huge Cheap KD 10, but adding something as great as Flyknit causes it ...

  3. XDU 1055

    #include<stdio.h> #include<cstring> int main() { //freopen("orz.txt","w&q ...

  4. Ubuntu安装dlib后import出现libstdc++.so.6: version `GLIBCXX_3.4.21' not found

    1 问题描述 先安装依赖包cmake,libboost,再安装dlib sudo apt-get install cmake sudo apt-get install libboost-python- ...

  5. tensorflow中使用tf.variable_scope和tf.get_variable的ValueError

    ValueError: Variable conv1/weights1 already exists, disallowed. Did you mean to set reuse=True in Va ...

  6. suse linux 常用命令

    功能:rm 命令,删除一个目录中的一个或多个文件或目录(文件夹). 它也可以将某个目录及其下的所有文件及子目录均删除. 对于链接文件,只是删除了链接,原有文件均保持不变. 文件一旦被删除,它不能被恢复 ...

  7. Tomcat的工作模式和运行模式

    (1)工作模式 Tomcat作为servlet容器,有三种工作模式: 1.独立的servlet容器,servlet容器是web服务器的一部分: 2.进程内的servlet容器,servlet容器是作为 ...

  8. Ubuntu 18.04配置机场客户端

    最近把自己的笔记本电脑安装成ubuntu18.04操作系统,为了更方便的查找文档,所以需要配置一下机场(v2ray)的客户端方便查找资料,以下是配置步骤: 1.下载并执行一键脚本: bash < ...

  9. 20145309《Java程序设计》第八周学习总结

    日志 •java.util.logging包提供了日志功能相关类与接口,使用日志的起点是logger类,Logger类的构造函数标示为protected,不是java.util.logging同包的类 ...

  10. 20145335郝昊《java程序设计》第8周学习总结

    20145335郝昊 <Java程序设计>第8周学习总结 教材学习内容总结 第14章 NIO与NIO2 NIO简介 NIO使用频道来衔接数据结点,在处理数据时,NIO可以让你设定缓冲区容量 ...