千家信息网

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

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍了MongoDB访问控制的副本集如何部署的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MongoDB访问控制的副本集如何部署文章都会有所收获,下面我们一起
千家信息网最后更新 2026年10月31日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安全错误 数据库的锁怎样保障安全 博彦科技互联网金融 互联网科技卖菜 广州互联网科技公司 互联网医疗科技 为想互联网科技 互联网科技视频 小马过河互联网科技 金融科技和互联网金融 互联网科技寓意 深圳市罗太互联网科技有限公司 阿里互联网科技企业 每天都有哪些好的互联网科技 深圳无忧互联网科技 广州燕处互联网科技有限公司 互联网科技职业技能培训学校 好易买互联网科技 数字科技和互联网金融哪个好 长沙易易互联网科技有限公司 优雇互联网科技有限公司 瑞安市蟠桃会互联网科技有限公司 互联网金融科技 广州大一互联网络科技有限公司 互联网科技与金融科技 上海喔噻互联网科技 互联网高科技股票 成都互联网科技公司工作好不好 佛山市翊博互联网络科技有限公司 新氧科技和美国互联网有关系吗 济南小医互联网科技有限公司招聘 上海同邻互联网科技有限公司规模
0