千家信息网

MongoDB访问控制的副本集如何部署

发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,这篇文章主要介绍了MongoDB访问控制的副本集如何部署的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MongoDB访问控制的副本集如何部署文章都会有所收获,下面我们一起
千家信息网最后更新 2024年11月26日MongoDB访问控制的副本集如何部署

这篇文章主要介绍了MongoDB访问控制的副本集如何部署的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MongoDB访问控制的副本集如何部署文章都会有所收获,下面我们一起来看看吧。

版本及环境 MongoDB4.4 Centos6.5

一、下载 MongoDB Server 及 MongoDB Shell

   MongoDB Server 提供数据库服务。 Mongo Shell 可以理解为命令行的客户端程序。

   下载地址:https://www.mongodb.com/try/download/community

   此处选择对应的,版本, 平台,Package类型(server /shell)

    RMP 安装

rpm -ivh mongodb-org-server-4.4.12-1.el6.x86_64.rpm

rpm -ivh mongodb-org-shell-4.4.12-1.el6.x86_64.rpm

二、副本集初始化

副本集(replica set)是一组维护相同数据的mongod进程, 提供了高可用性。部分节点故障了,还可以自动选取主节点,继续提供服务。

由于副本集的链接方式和单点有些区别,所以测试环境也按照副本集方式部署。

    

    1. 首先创建下数据库数据存储目录,用于存储数据。 环境是单机,三个节点的目录,都是在一台机器创建的,伪分布式。

mkdir -p /srv/mongodb/rs0-0  /srv/mongodb/rs0-1 /srv/mongodb/rs0-2

    2. 依次启动三个mongod实例

mongod --replSet rs0 --fork --logpath  /srv/mongodb/0 --logappend --port 27017 --bind_ip 0.0.0.0,:: --dbpath /srv/mongodb/rs0-0  --oplogSize 128mongod --replSet rs0 --fork  --logpath  /srv/mongodb/1 --logappend --port 27018 --bind_ip 0.0.0.0,:: --dbpath /srv/mongodb/rs0-1  --oplogSize 128mongod --replSet rs0 --fork  --logpath  /srv/mongodb/2 --logappend --port 27019 --bind_ip 0.0.0.0,:: --dbpath /srv/mongodb/rs0-2  --oplogSize 128

    启动后, ps -axu |grep mongo 看一下 3个进程 mongod 是不是都ok。

    3.使用mongo shell 连接其中一个节点。进行副本集初始化。

mongo --port 27017

    进入shell后, 执行如下命令。注意替换"10.13.50.40" 为实际IP

rsconf = {  _id: "rs0",  members: [    {     _id: 0,     host: "10.13.50.40:27017"    },    {     _id: 1,     host: "10.13.50.40:27018"    },    {     _id: 2,     host: "10.13.50.40:27019"    }   ]}
rs.initiate( rsconf )

    初始化完成后,可以通过

rs.conf()

    查看副本集配置。

    到这里3个节点的副本集已经配置好了。可以连接进行读写操作了。

但目前连接是没有访问控制的, 下面来增加访问控制。

三、增加访问控制

    在副本集中启用访问控制,需要进行两项配置。

    1. 副本集节点成员间的安全认证,支持keyfiles 或者 x.509 证书 认证。

2.副本集服务与数据库连接客户端间的安全认证, 用户名,密码。权限基于用户所属角色。

    副本集节点间的内部认证, 这里使用keyfiles。 通俗说就是所有节点共享相同的keyfile 作为密码。keyfile正确, 才能够加入副本集,实现了副本集节点间的身份验证。 

    创建一个keyfile, 复制三份,供3个节点使用。下面按官方手册, 使用openssl 生成随机密码,修改权限为400. 复制到3个目录备用。

openssl rand -base64 756 > keychmod  400 keymkdir -p  /srv/mongodb/k0 /srv/mongodb/k1   /srv/mongodb/k2cp key /srv/mongodb/k0/cp key /srv/mongodb/k1/cp key /srv/mongodb/k2/

下面创建用户,指定角色。 如前述,使用 mongo shell 连接数据库。创建用户需要在主节点进行。如果连接的节点不是当前主节点。可以用 rs.status(); 查看主节点ip端口后连接。进入mongo shell后, 输入如下命令。

admin = db.getSiblingDB("admin")admin.createUser(  {    user: "admin",    pwd: "admin!@#$",     roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]  })

    创建一个用户名未 admin 角色为 userAdminAnyDatabase 的用户, 密码为 admin!@#$。 关于内建角色的更多信息可以在这里了解。

  https://docs.mongodb.com/v4.4/reference/built-in-roles/

    准备就绪后。 需要重启mongo server服务, 启用访问控制机制。 下面关闭所有节点。

mongo --port 27017 --eval 'db.adminCommand("shutdown")'mongo --port 27018 --eval 'db.adminCommand("shutdown")'mongo --port 27019 --eval 'db.adminCommand("shutdown")'

    重新启动mongod,启用访问控制 --auth --keyFile

mongod --replSet rs0 --fork --auth  --keyFile  /srv/mongodb/k0/key --logpath  /srv/mongodb/0 --logappend --port 27017 --bind_ip 0.0.0.0,:: --dbpath /srv/mongodb/rs0-0  --oplogSize 128mongod --replSet rs0 --fork --auth --keyFile  /srv/mongodb/k1/key  --logpath  /srv/mongodb/1 --logappend --port 27018 --bind_ip 0.0.0.0,:: --dbpath /srv/mongodb/rs0-1  --oplogSize 128mongod --replSet rs0 --fork --auth  --keyFile  /srv/mongodb/k2/key  --logpath  /srv/mongodb/2 --logappend --port 27019 --bind_ip 0.0.0.0,:: --dbpath /srv/mongodb/rs0-2  --oplogSize 128

  此时,已经启用了访问控制, 无权限用户无法对数据库进行读写,无法新增用户。下面使用 带认证的方式登录。 --username 及 --password

mongo admin --username admin --password 'admin!@#$'  --host rs0/10.13.50.40:27017,10.13.50.40:27018,10.13.50.40:27019

    admin的角色userAdminAnyDatabase 具有用户管理权限,但无数据库读写权限。 登陆后在 mongo shell中创建一个数据库库读写用户,读写特定数据库。test 用户具有对数据库 mytest 的读写权限, 属于内置的 readWrite 角色。

db.createUser( {user: "test",pwd: "test!@#$",roles: [ { role: "readWrite", db: "mytest" } ]})

    然后mongo shell 使用 test 登录 验证。

mongo test --username test --password 'test!@#$'  --host rs0/10.13.50.40:27017,10.13.50.40:27018,10.13.50.40:27019

  test登录后,在mongo shell 中测试读写

use mytestdb.col.insert({name:'测试',age:1})db.col.find()

   查询结果

{ "_id" : ObjectId("61f3da65e72c3f10edef9a78"), "name" : "测试", "age" : 1 }

关于"MongoDB访问控制的副本集如何部署"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"MongoDB访问控制的副本集如何部署"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

副本 节点 数据 控制 用户 数据库 权限 角色 认证 密码 服务 测试 命令 方式 环境 目录 知识 登录 配置 相同 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 维护网络安全大学生怎么做 守护网络安全手抄报图片 魔兽服务器人口比例哪里查 博硕搅拌站操作系统删除数据库 券商网络安全股票龙头股 最新网络安全挑战 网络安全准入功能 2020网络安全公司50强 db2建数据库编目 吉林省网络安全公司 上海网站软件开发 手机操作系统使用什么软件开发 西安市网络安全比赛 5g服务器玩游戏 常用的关系型数据库ldap 绝地大逃杀中国服务器 fivem服务器管理员代码 一般软件开发费用估算 绝地求生如何选服务器 苹果和电脑互传文件服务器名称 山西党员系统服务器地址怎么填写 边瑞网络技术有限公司客服 风控软件开发发展路线 中兴基带软件开发中心 网络安全检测需要什么资质 一则动漫告诉你网络安全是什么 两个数据库同步数据 软件开发管理团队现状 网络安全对电子商务的影响有哪些 浙江工程软件开发技术指导
0