上一篇文章介绍了副本集集群的安装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:随机数长度。