如何重置MongoDB 3.0.2分片集群的root管理员密码?
重置MongoDB 3.0.2分片集群Root密码的步骤
针对你的情况(拥有服务器root权限、低权限应用用户仍可正常访问、集群包含mongos、分片副本集和配置服务器副本集),我整理了一套安全且不影响应用的重置流程:
1. 先停止所有mongos路由节点
mongos是集群的入口,先停掉它避免在修改过程中出现路由异常。在每个mongos服务器上执行:
# 如果你用的是sysvinit(Debian老版本常见) /etc/init.d/mongos stop # 或者systemd(如果是较新的Debian) systemctl stop mongos
2. 处理配置服务器副本集
配置服务器存储着集群的用户认证信息,这是修改root密码的核心环节:
- 逐个修改配置服务器的配置文件(通常路径是
/etc/mongod.conf,如果是自定义路径请调整):
找到security段,将authorization设置为disabled:security: authorization: disabled注意:不要同时重启所有配置服务器,逐个操作保证副本集的可用性。
- 重启当前配置服务器节点:
/etc/init.d/mongod restart - 等所有配置服务器都修改并重启完成后,连接到配置副本集的主节点(可以通过
mongo --host <config-primary-ip>:<port>连接,执行rs.status()确认主节点):use admin # 如果原root用户存在,更新密码 db.updateUser("root", {pwd: "你的新Root密码"}) # 如果原root用户不存在,创建新的root用户 db.createUser({ user: "root", pwd: "你的新Root密码", roles: ["root"] })
3. 处理每个分片的副本集
虽然集群用户信息存在配置服务器,但为了避免分片节点本地有残留的权限配置,建议同步更新每个分片主节点的root密码:
- 同样逐个修改分片副本集节点的配置文件,将
security.authorization设为disabled,重启节点:/etc/init.d/mongod restart - 连接到分片副本集的主节点,切换到admin库,执行和配置服务器相同的密码更新/创建命令:
use admin db.updateUser("root", {pwd: "你的新Root密码"}) # 或者创建(如果不存在)
4. 恢复所有节点的认证配置
完成密码修改后,把所有配置服务器和分片节点的配置文件改回:
security: authorization: enabled
然后逐个重启这些节点,确保认证模式恢复。
5. 重启mongos节点并验证
在每个mongos服务器上重启服务:
/etc/init.d/mongos start
然后用新密码连接mongos测试:
mongo --host <mongos-ip>:<port> -u root -p "你的新Root密码" --authenticationDatabase admin
连接成功后,执行show dbs、show collections等命令,确认权限正常。
注意:整个过程中应用的低权限用户不会受影响,因为我们只修改了root用户的密码,没有改动应用用户的权限或密码。
内容的提问来源于stack exchange,提问作者gl00ten
相关产品推荐
相关产品推荐

