mongodb集群搭建完毕后权限设置

上一篇文章介绍了副本集集群的安装https://blog.csdn.net/hbn1326317071/article/details/88606010
这一篇主要是针对上一片文章中搭建好的集群进行权限设置

使用mongo --port 27017登录主库
切换数据库 use admin
db.createUser(
{
user: “root”,
pwd: “root”,
roles: [ { role: “userAdminAnyDatabase”, db: “admin” } ]
}
)
切换到test库
db.createUser(
… {
… user: “testUser”,
… pwd: “root”,
… roles: [ { role: “readWrite”, db: “test” } ]
… }
… )

mkdir -p /root/mongodb
touch keyfile

产生随机数到keyfile文件中
openssl rand -base64 666 > /opt/mongodb/mongodb.key

新增读写权限
chmod 600 /opt/mongodb/mongodb.key

注意:

创建keyFile前,需要先停掉副本集中所有主从节点的mongod服务(systemctl stop mongodb.service),然后再创建,否则有可能出现服务启动不了的情况。
mongodb集群有自动切换主库功能,如果先关主库,主库就切换到其它上面去了,这里预防主库变更,从库关闭后再关闭主库
将主节点中的keyfile文件拷贝到副本集其他从节点服务器中,路径地址对应mongo.conf配置文件中的keyFile字段地址。并设置keyfile权限为600

更新配置mongo.conf

配置好所有节点的keyFile文件后,打开主节点的mongo.conf配置,取消注释:auth,keyFile,oplogSize;从节点取消keyFile,oplogSize的注释即可,从节点不需要启用auth,然后重新启动所有节点服务(systemctrl start mongodb.service)

启动mongo默认连接到test,每次都需要使用db.auth(‘root’,‘root’)进行用户认证才能操作数据库
因为:root账号只赋予了userAdminAnyDatabase权限,在操作rs.config(),rs.status()时,提示没有权限操作:

需要重新赋予副本集的操作权限:

db.grantRolesToUser( “root” , [ { role: “dbOwner”, db: “admin” },{ “role”: “clusterAdmin”, “db”: “admin” },
{ “role”: “userAdminAnyDatabase”, “db”: “admin” },
{ “role”: “dbAdminAnyDatabase”, “db”: “admin” },
{ role: “root”, db: “admin” } ])

加上以上权限后,就可以操作副本集命令,dbOwner可以直接操作其他数据库如test,不需要重新认证 db.auth(‘testUser’,‘root’)

数据验证:通过mongo compass 登录主库进行数据的插入 然后通过
mongo --port 27018 登录从库 使用db.getMongo().setSlaveOk() 获得权限,进行数据查询,可以找到之前插入的数据。

其他操作:

删除用户
删除test库下面的admin用户

use test
db.dropUser(‘admin’)

use admin
switched to db admin

备注:

备注:

OpenSSL命令—rand
用来产生伪随机字节
用法:
openssl rand [-out file] [-rand file(s)] [-base64] [-hex] num

选项说明:
-out file:结果输出到file中。
-rand file(s):指定随机数种子文件,多个文件间用分隔符分开,windows用“;”,OpenVMS用“,“,其他系统用“:”。
-base64:输出结果为BASE64编码数据。
-hex:输出结果为16进制数据。
num:随机数长度。

猜你喜欢

转载自blog.csdn.net/hbn1326317071/article/details/88626322