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