对于搭建好的mongodb副本集加分片集群,为了安全,需启动安全认证,使用账号密码登录。

默认的mongodb是不设置认证的。只要ip和端口正确就能连接,这样是不安全的。

mongodb官网声称,为了能保障mongodb的安全可以做以下几个步骤:

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

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

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

以下详细描述如何配置安全认证。

■ 创建副本集认证的key文件

用openssl生成密码文件,然后使用chmod来更改文件权限,仅为文件所有者提供读取权限

cd /data/mongodb/conf

openssl rand -out mongo.keyfile -base64 90

chmod 600 mongo.keyfile

ll mongo.keyfile

-r-------- 1 mongod mongod 122 Aug 4 08:33 mongo.keyfile

提示:所有副本集节点都必须要用同一份keyfile,一般是在一台机器上生成,然后拷贝到其他机器上,且必须有读的权限,否则将来会报错:

permissions on /data/mongodb/conf/mongo.keyfile are too open

■ 修改配置文件指定keyfile

编辑各个服务的配置文件,添加如下内容:

vim /data/mongodb/conf/{config,shard[1-3],mongos}.conf

keyFile = /data/mongodb/conf/mongo.keyfile

注:开启keyfile认证就默认开启了auth认证

拷贝到其他节点:

scp /data/mongodb/conf/{config.conf,shard[1-3].conf,mongos.conf,mongo.keyfile} node2:/data/mongodb/conf

scp /data/mongodb/conf/{config.conf,shard[1-3].conf,mongos.conf,mongo.keyfile} node3:/data/mongodb/conf

■ 重新启动节点

依次启动配置节点、分片节点、路由节点

■ 创建帐号和认证

客户端mongosh,通过localhost登录任意一个mongos路由

提示:相当于一个后门,只能在 admin 下添加用户

提示:通过mongos添加的账号信息,只会保存到配置节点的服务中,具体的数据节点不保存账号信息,因此分片中的账号信息不涉及到同步问题

建议:先创建超管用户和普通用户,然后再开启安全配置

创建管理员帐号:

use admin

db.createUser({user: "admin", pwd: "password", roles: ["root"]})

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

创建一个普通权限帐号:

use testdb

db.createUser({user: "liking", pwd: "password", roles: ["readWrite"]})

db.auth("liking", "password")

■ 用管理员帐号可查看整体的分片情况

use admin

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

sh.status()

■ 用普通帐号访问数据

use testdb

db.auth("liking", "password")

■ 客户端连接多个mongos的标准格式

mongo mongodb://admin:'password'@node1:20000,node2:20000,node3:20000/testdb?authSource=admin

用 mongosh 连接报错,暂时无法解决,只能去掉用户名及密码连接,连接后再鉴权:

mongosh mongodb://node1:20000,node2:20000,node3:20000/admin

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

高可用mongodb集群(分片+副本):用户权限配置的更多相关文章

  1. 搭建高可用mongodb集群—— 分片

    从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的时候能否做到自动扩展? 在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出 ...

  2. 搭建高可用MongoDB集群(一):配置MongoDB

    在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量数据高效存储.高可扩展性和高可用性这些难题.不过就是因为这些问题Nosql诞生了. NOSQL有这些优势: 大数据量,可以通过 ...

  3. 搭建高可用mongodb集群(四)—— 分片(经典)

    转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还 ...

  4. [转]搭建高可用mongodb集群(四)—— 分片

    按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...

  5. [转]搭建高可用mongodb集群(二)—— 副本集

    在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...

  6. 搭建高可用mongodb集群(四)—— 分片

    按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...

  7. 搭建高可用mongodb集群(二)—— 副本集

    在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...

  8. 搭建高可用mongodb集群(四)—— 分片

    按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...

  9. 搭建高可用mongodb集群(二)—— 副本集

    在上一篇文章<搭建高可用MongoDB集群(一)--配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...

  10. 搭建高可用mongodb集群—— 副本集

    转自:http://www.lanceyan.com/tech/mongodb/mongodb_repset1.html 在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB& ...

随机推荐

  1. 前端vue 宫格组件提供常见九宫格菜单组件,扩充性好,可切换九宫格 十二宫格 十五宫格

    快速实现vue uni-app宫格组件提供常见九宫格菜单组件,扩充性好,可切换九宫格 十二宫格 十五宫格; 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net. ...

  2. GPT3的技术突破:实现更准确、更真实的语言生成

    目录 1. 引言 2. 技术原理及概念 3. 实现步骤与流程 4. 应用示例与代码实现讲解 5. 优化与改进 6. 结论与展望 7. 附录:常见问题与解答 GPT-3 技术突破:实现更准确.更真实的语 ...

  3. mac shell终端命令行快捷键

    Ctrl + d 删除一个字符,相当于通常的Delete键(命令行若无所有字符,则相当于exit:处理多行标准输入时也表示eof) Ctrl + h 退格删除一个字符,相当于通常的Backspace键 ...

  4. 「学习笔记」Lambda 表达式

    Lambda 表达式因数学中的 \(\lambda\) 演算得名, 直接对应于其中的 lambda 抽象. Lambda 表达式能够捕获作用域中的变量的无名函数对象, 我们可以将其理解为一个匿名的内联 ...

  5. 5.2 基于ROP漏洞挖掘与利用

    通常情况下栈溢出可能造成的后果有两种,一类是本地提权另一类则是远程执行任意命令,通常C/C++并没有提供智能化检查用户输入是否合法的功能,同时程序编写人员在编写代码时也很难始终检查栈是否会发生溢出,这 ...

  6. PTA 21级数据结构与算法实验4—字符串和数组

    目录 7-1 字符串模式匹配(KMP) 7-2 [模板]KMP字符串匹配 7-3 统计子串 7-4 好中缀 7-5 病毒变种 7-6 判断对称矩阵 7-7 三元组顺序表表示的稀疏矩阵转置运算Ⅰ 7-8 ...

  7. python:导入库、模块失败

    一般发生在程序开始部分: from pymodbus.client.sync import ModbusSerialClient from pymodbus.payload import Binary ...

  8. 自定义gradle插件并且发布到本地仓库

    转载请标明出处,维权必究:http://77blogs.com/?p=189 一.在工程上新建一个Module. 二.删除其余不必要的文件,最终目录结构如下: 注意:由于我用的是kotlin语言,所以 ...

  9. LangChain:打造自己的LLM应用

    1.LangChain是什么 LangChain是一个框架,用于开发由LLM驱动的应用程序.可以简单认为是LLM领域的Spring,以及开源版的ChatGPT插件系统.核心的2个功能为: 1)可以将 ...

  10. java if switch

    强制类型转换 注意事项:大的转小的需要强制转换 例如: double b=3.4 int小于double所以想让int=b,要在b后面加个(int)b. int a=(int)b    得到3 因为大 ...