MongoDB7分片副本集SCRAM权限设置

一、mongodb默认部署关闭认证:

这篇文章介绍如何设置mongodb7分片副本集,登录权限。默认官方部署的时候,不带认证。

二、环境

系统内核:4.19
三台服务器10/20/30
包版本:
mongodb-linux-x86_64-rhel8-7.xxx

三、mongodb角色和用户概述

mongodb的账户及对应的角色有以下几种:
普通操作角色、管理员操作角色、实例级别操作角色、集群管理员角色、备份与恢复操作角色
在这里插入图片描述
关于system.js解释可以参考以下官方链接:system.js

四、mongodb安全性

MongoDB 提供各种功能,例如身份验证、访问控制、加密,从而保护 MongoDB 部署。一些关键的安全功能:
在这里插入图片描述

五、开启mongodb集群认证

本文档是在部署的时候,未有添加认证,后期在补充认证时,需要进行的一系列操作。本文档以SCRAM为例,说明认证如何添加。
创建账号 PS:一定要先创建账号,再开启认证参数

1.创建管理员账号

首先登录任意一台mongos,mongosh mongodb://server1:27000

[direct: mongos] test> use admin
switched to db admin
[direct: mongos] admin> db.createUser({user:'root', pwd:'root',roles:['root']})

再次登录的时候,执行命令会报错,需要先通过登录才能进一步操作。
在这里插入图片描述
再次登录的时候,执行命令会报错,需要先通过登录才能进一步操作。

在这里插入图片描述

2.登录shard1,创建root账号并赋权(一定要在primary节点创建)

一定要在primary节点创建,注意端口号

mongosh mongodb://server1:27001
shard1 [direct: primary] test> use admin
switched to db admin
shard1 [direct: primary] admin>  db.createUser({user:'root', pwd:'root',roles:['root']})
{
  ok: 1,
  '$clusterTime': {
    clusterTime: Timestamp({ t: 1731068252, i: 4 }),
    signature: {
      hash: Binary.createFromBase64('AAAAAAAAAAAAAAAAAAAAAAAAAAA=', 0),
      keyId: Long('0')
    }
  },
  operationTime: Timestamp({ t: 1731068252, i: 4 })
}
shard1 [direct: primary] admin>

3. 登录shard2,创建root账号并赋权(一定要在primary节点创建)

一定要在primary节点创建,注意端口号

mongosh mongodb://server2:27002
shard2 [direct: primary] test> use admin
switched to db admin
shard2 [direct: primary] admin> 

shard2 [direct: primary] admin>  db.createUser({user:'root', pwd:'root',roles:['root']})
{
  ok: 1,
  '$clusterTime': {
    clusterTime: Timestamp({ t: 1731068281, i: 4 }),
    signature: {
      hash: Binary.createFromBase64('AAAAAAAAAAAAAAAAAAAAAAAAAAA=', 0),
      keyId: Long('0')
    }
  },
  operationTime: Timestamp({ t: 1731068281, i: 4 })
}
shard2 [direct: primary] admin>

4.登录shard3,创建root账号并赋权(一定要在primary节点创建)

一定要在primary节点创建,注意端口号

mongosh mongodb://server3:27003
shard3 [direct: primary] test> use admin
switched to db admin
shard3 [direct: primary] admin>  db.createUser({user:'root', pwd:'root',roles:['root']})
{
  ok: 1,
  '$clusterTime': {
    clusterTime: Timestamp({ t: 1731068311, i: 4 }),
    signature: {
      hash: Binary.createFromBase64('AAAAAAAAAAAAAAAAAAAAAAAAAAA=', 0),
      keyId: Long('0')
    }
  },
  operationTime: Timestamp({ t: 1731068311, i: 4 })
}
shard3 [direct: primary] admin> 

关闭mongos、shard、config

注意:关闭mongodb分片副本集集群的服务时,需要先关闭mongos服务、再关闭三个shard服务、最后关闭config server服务
对于新部署环境调试时可以直接通过kill 进程号的方式来关停.

对于生产环境需按标准方式停止,方式如下:

1.停止mongos路由

依次关闭3台主机的mongos服务

mongosh mongodb://server1:27000
[direct: mongos] test> use admin
[direct: mongos] admin> db.shutdownServer()
mongosh mongodb://server2:27000
[direct: mongos] test> use admin
[direct: mongos] admin> db.shutdownServer()
mongosh mongodb://server3:27000
[direct: mongos] test> use admin
[direct: mongos] admin> db.shutdownServer()

mongos路由停完之后,分别在3台主机查看进程是否消失

ps -ef|grep mongos

2.停止shard分片

每个shard分片都组成一个副本集,在关停的时候需要先关闭仲裁节点(ARBITER)和从节点(SECONDARY),然后再关闭主节点(PRIMARY)
停止shard1分片步骤如下:
1、依次登录server1、server2、server3的27001端口,观察副本集的主从关系
2、使用db.shutdownServer()关闭仲裁节点(ARBITER)和从节点(SECONDARY)
3、使用db.shutdownServer()关闭主节点(PRIMARY)

mongosh mongodb://server1:27001
use admin
db.shutdownServer()

停止shard2、shard3分片可参考上面shard1的停止方式
所有shard分片停完之后,分别在3台主机查看进程是否消失

ps -ef|grep shard

3.停止config配置

依次关闭3台主机的config服务

mongosh mongodb://server1:27017
use admin
db.shutdownServer()
mongosh mongodb://server2:27017
use admin
db.shutdownServer()
mongosh mongodb://server3:27017
use admin
db.shutdownServer()

mongos路由停完之后,分别在3台主机查看进程是否消失

ps -ef|grep mongod

修改mongos、shard、config

1.修改mongos、shard、config配置文件,增加安全认证的参数

在一台主机生成KeyFile.file文件,并将文件拷贝到另外两台主机

openssl rand -base64 756 > /usr/local/mongodb/config/mongoKeyFile.file
chmod 400 /usr/local/mongodb/config/mongoKeyFile.file

2.修改mongos配置文件

vim /usr/local/mongodb/mongos/conf/mongos.conf
#添加安全认证的参数,mongos不需要添加‘authorization: enabled’
security:
  keyFile: /usr/local/mongodb/config/mongoKeyFile.file

3.修改shard配置文件

vim /usr/local/mongodb/shard1/conf/shard1.conf
vim /usr/local/mongodb/shard2/conf/shard2.conf
vim /usr/local/mongodb/shard3/conf/shard3.conf
#添加安全认证的参数
security:
  keyFile: /usr/local/mongodb/config/mongoKeyFile.file
  authorization: enabled

4.修改config配置文件

vim /usr/local/mongodb/config/conf/mongod.conf
#添加安全认证的参数
security:
  keyFile: /usr/local/mongodb/config/mongoKeyFile.file
  authorization: enabled

启动mongos、shard、config

依次启动3台主机上的config、shard、mongos服务

mongod --config  /usr/local/mongodb/config/conf/mongod.conf 

mongod --config  /usr/local/mongodb/shard1/conf/shard1.conf 
mongod --config  /usr/local/mongodb/shard2/conf/shard2.conf 
mongod --config  /usr/local/mongodb/shard3/conf/shard3.conf 

mongos --config  /usr/local/mongodb/mongos/conf/mongos.conf 

所有服务启动之后,分别在3台主机查看5个进程是否都在

ps -ef|grep mongo

在这里插入图片描述

验证安全账号密码认证是否开启成功

依次启动3台主机上的config、shard、mongos服务

1.验证mongos认证是否生效

登录mongos路由服务,切换至admin库,先执行命令看是否有权限问题报错,然后再进行权限认证,认证完成后再执行同样命令,看结果输出是否正常

mongosh mongodb://server1:27000

在这里插入图片描述

2.验证shard认证是否生效

登录shard服务,切换至admin库,先执行命令看是否有权限问题报错,然后再进行权限认证,认证完成后再执行同样命令,看结果输出是否正常

mongosh mongodb://server1:27001

在这里插入图片描述

3.验证config认证是否生效

登录config服务,切换至admin库,先执行命令看是否有权限问题报错,然后再进行权限认证,认证完成后再执行同样命令,看结果输出是否正常

mongosh mongodb://server1:27017

在这里插入图片描述
至此,验证生效。

Springboot与mongodb的连接认证

使用用户名和密码连接到mongodb服务器,

application.yml;

spring:
 #数据库配置
 data:
   mongodb:
   # 主机地址:
   host: x.x.x.10,x.x.x.20,x.x.x.30
```# 数据库
database: xxxxdb
#默认端口
port: 27017
#账户
username: dabao
#密码:
password: 1111111
#  url: mongodb://dabao:111111@x.x.x.10:27017,x.x.x.20:27018,x.x.x.30:27019/xxxxdb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ToString_1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值