MongoDB的权限管理
mongodb的用户权限是跟着数据库走的,除了超级管理员外,其他管理员只能管理自己的库。
user 普通业务账号
oldPasswd 普通业务账号旧密码
newPasswd 普通业务账号新密码
superUser 超管用户
oldSuperPasswd 超管用户旧密码
newSuperPasswd 超管用户新密码
$ cat renew_mongo_passwd.sh
#!/bin/bash
# 获取该mongoDB实例所有库名(排除 local 、admin 库)
dbs=`echo -e "show dbs" | mongo --quiet --host xx.xx.xx.xx --port 27017 -u superUser -p 'oldSuperPasswd' --authenticationDatabase admin | awk '{print $1}' | grep -vwE "local|admin"`
# 手动确认一下所有库名,避免遗漏
echo $dbs | tr ' ' '\n'
for db in ${dbs}
do
echo ##### $db #####
# 输出各业务库用户
echo -e "use $db;\n show users" | mongo --quiet --host xx.xx.xx.xx --port 27017 -u oldSuperUser -p 'oldSuperPasswd' --authenticationDatabase admin
# 用超管用户身份进入各自业务库,修改业务账号密码
echo -e "use $db;\n db.changeUserPassword('user','newPasswd')" | mongo --quiet --host xx.xx.xx.xx --port 27017 -u superUser -p 'oldSuperPasswd' --authenticationDatabase admin
# 验证业务库用户密码认证(所有业务库用户可以在admin库做认证验证登陆,切到对应库做认证)
echo -e "use $db;\n db.auth('user','newPasswd')" | mongo --quiet --host xx.xx.xx.xx --port 27017 -u superUser -p 'oldSuperPasswd' --authenticationDatabase admin
done
# 用超管用户身份进入admin库,超管用户密码
echo -e "use admin;\n db.changeUserPassword('superUser','newSuperPasswd')" | mongo --quiet --host xx.xx.xx.xx --port 27017 -u superUser -p 'oldSuperPasswd' --authenticationDatabase admin
# 在admin库验证超管新密码
echo -e "use admin;\n db.auth('superUser','newSuperPasswd')" | mongo --quiet --host xx.xx.xx.xx --port 27017 -u superUser -p 'newSuperPasswd' --authenticationDatabase admin
网友评论