一、背景
1.需要将已有业务数据的复制集 replSet01 数据都导入到 新搭建的复制集replSet02 中
2.新搭建的复制集replSet02 超管用户密码跟源复制集replSet01 的密码都不一样
-
用新的复制集replSet02 的超管用户将原replSet01的数据导(admin库除外)入到 replSet02 ,不能导入admin库的原因是replSet02 的超管用户密码跟replSet01不同
-
将业务数据导入 replSet02后,用replSet02超管用户,将业务库中的用户全部删除,重新创建授权一遍,并验证
超管账号密码: superUser/superPasswd
业务账号密码: testUser/testPasswd
根据数据库权限最小化原则,复制集中的超管账号密码和业务账号密码应该不一样!
二、 脚本操作
删除用户重建
#!/bin/bash
dbs="
testDB01
testDB02
testDB03
testDB04
"
for db in ${dbs}
do
echo ##### $db #####
# 删除各业务库中业务用户
echo -e "use $db;\n db.dropUser('testUser')" | /path/to/bin/mongo --quiet --host=192.168.80.219 --port=27017 -u superUser -p 'superPasswd' --authenticationDatabase=admin
# 重新创建各业务库用户,授权
echo -e "use $db;\n db.createUser({user:'testUser',pwd:'testPasswd',roles:[{role:'readWrite',db:'$db'},{role:'dbAdmin',db:'$db'},{role:'userAdmin',db:'$db'}]})" | /path/to/bin/mongo --quiet --host=192.168.80.219 --port=27017 -u superUser -p 'superPasswd' --authenticationDatabase=admin
# 输出各业务库用户
echo -e "use $db;\n show users" | /path/to/bin/mongo --quiet --host=192.168.80.219 --port=27017 -u superUser -p 'superPasswd' --authenticationDatabase=admin
# 验证业务库用户密码认证
echo -e "use $db;\n db.auth('testUser','testPasswd')" | /path/to/bin/mongo --quiet --host=192.168.80.219 --port=27017 -u superUser -p 'superPasswd' --authenticationDatabase=admin
done
这种直接删除用户,重新创建的方式过于简单粗暴,对于授权复杂的用户可能就不太适用了
好的方式应该是,将原业务用户导入后,直接在新实例中修改密码,其他不变
修改用户密码
#!/bin/bash
dbs='
testDB01
testDB02
testDB03
testDB04
'
for db in ${dbs}
do
echo ##### $db #####
# 用超管用户身份进入各自业务库,修改业务账号密码
echo -e "use $db;\n db.changeUserPassword('testUser','newPasswd'))" | /path/to/bin/mongo --quiet --host=192.168.80.219 --port=27017 -u superUser -p 'superPasswd' --authenticationDatabase=admin
# 输出各业务库用户
echo -e "use $db;\n show users" | /path/to/bin/mongo --quiet --host=192.168.80.219 --port=27017 -u superUser -p 'superPasswd' --authenticationDatabase=admin
# 验证业务库用户密码认证
echo -e "use $db;\n db.auth('testUser','newPasswd')" | /path/to/bin/mongo --quiet --host=192.168.80.219 --port=27017 -u superUser -p 'superPasswd' --authenticationDatabase=admin
done
三、参考
json在线工具
https://www.sojson.com
网友评论