如何在Mongodb中重置root密码?

时间:2018-04-16 19:42:55

标签: mongodb

我有一个mongodb分片群集,有mongos机器,复制集中的mongo节点和配置服务器。 MongoDB版本是3.02

那个设置它的人不久前离开了公司,现在我不能做简单的事情,比如 show dbs show collections

我在所有这些Debian机器上都有操作系统root,所以我想知道如何重置mongo的root密码,以便管理数据库。

使用权限较低的用户,访问此数据库的应用似乎工作正常。我知道这个特定用户的密码。

这是一个生产设置,因此我无法承受将其保持超过几秒钟,最长时间。

4 个答案:

答案 0 :(得分:2)

这取决于用户类型。例如,如果您使用的是 SCRAM ,则重置密码的基本步骤将是:

  • 停止mongod节点
  • 在mongod.conf中禁用授权
  • 重新启动副本集节点
  • 使用mongo shell连接到副本集主节点
  • 通过db.changePassword
  • 重置密码

答案 1 :(得分:0)

这可能不是完美的答案,因为我无法测试它。基本问题当然是,您无法将系统置于维护模式,您可以在其中更改管理员密码...但是配置文件参数security.transitionToAuth可以将滚动内容添加到配置文件中(或多个)。

使用security.transitionToAuth运行的mongod或mongos不会强制执行用户访问控制。 用户可以在没有任何访问控制检查的情况下连接到您的部署,并执行读取,写入和管理操作。

答案 2 :(得分:0)

我认为这可行:

  1. 停止MongoDB实例
  2. 从MongoDB配置中删除--auth和/或--keyfile选项以禁用身份验证
  3. 启动未经身份验证的实例
  4. 根据需要修改用户
  5. 在启用身份验证的情况下重新启动实例
  6. https://dba.stackexchange.com/questions/62976/how-can-i-enter-mongo-as-a-superuser-or-reset-users

答案 3 :(得分:0)

这里有两个选项

如果您计划升级到3.4,则无需停机

  • MongoDB 3.4允许Enforce Keyfile Access Control in a Replica Set without Downtime
  • 您需要使用--transitionToAuth启动所有成员(这将允许经过身份验证和未经过身份验证的流量一段时间)
  • 在primary上登录mongo shell并创建userAdmin
  • 使用userAdmin
  • 注销并再次登录
  • 创建rootAdmin
  • 将密码存储在密码管理器
  • 禁用transitionToAuth(仅允许经过身份验证的流量到副本集)

如果您需要在没有升级的情况下对现有MongoDB执行此操作:

  • 以滚动方式停止副本集中的辅助副本。使用keyFile选项
  • 禁用身份验证
  • 降级主数据库并更新其配置以禁用身份验证。
  • 更新您是从应用程序配置中删除用户名和密码的应用程序
  • 重新启动应用程序
  • 在admin DB中创建useradmin和rootAdmin
  • 在密码管理器中保存密码
  • 在副本集中启用身份验证
  • 使用包含用户名和密码的旧配置启动应用程序