如何以超级用户身份输入 Mongo 或重置用户?

Ton*_*ony 31 mongodb

我正在玩弄权限并将自己锁定在 Mongo 数据库之外。我很确定我是通过尝试显式添加对数据库的访问来做到这一点的,但我改写了只允许对数据库的访问权限。所以我实际上被锁定在我的 Mongo 数据库之外,我读到的所有内容都告诉我如果我有添加用户权限,如何创建超级用户。现在我认为我没有任何拥有该特权的用户。有没有办法以所有访问权限进入数据库?我拥有服务器并拥有 root 访问权限。

小智 42

如果您已将自己锁定,则需要执行以下操作:

  1. 停止您的 MongoDB 实例
  2. 从 MongoDB 配置中删除 --auth 和/或 --keyfile 选项以禁用身份验证
  3. 无需身份验证即可启动实例
  4. 根据需要编辑用户
  5. 在启用身份验证的情况下重新启动实例


小智 17

当我在没有先添加超级用户的情况下创建用户时遇到了类似的问题。以下步骤有助于解决问题:

  1. 使用sudo( sudo vi mongodb.conf)打开 MongoDB 配置文件。
    该文件可以在/etc/文件夹中找到。
  2. 评论"auth = true"
  3. 停止 MongoDB 服务 ( sudo service mongod stop)
  4. 启动 MongoDB 服务 ( sudo service mongod start)
  5. 然后使用以下命令创建“root”超级用户:

    use admin
    
    db.createUser({user:"admin",pwd:"password",roles:[{role:"root",db:"admin"}]});
    
    Run Code Online (Sandbox Code Playgroud)

    供参考https://docs.mongodb.com/manual/reference/built-in-roles/#superuser-roles

  6. 返回并取消注释"auth=true"。停止和启动/重启 mongodb 服务。


Jos*_*ine 12

如果您使用带有keyfile

使用内部身份验证的副本集成员之间的安全性

密钥文件用于复制中的身份验证。

security:
  keyFile: <path-to-keyfile>
replication:
  replSetName: <replicaSetName>
Run Code Online (Sandbox Code Playgroud)

您可以使用此命令以管理员身份登录 mongod:

mongo -u __system -p "$(tr -d '\011-\015\040' < path-to-keyfile)" --authenticationDatabase local
Run Code Online (Sandbox Code Playgroud)

后记您可以创建或修改您的管理员用户。

内部角色

__systemMongoDB 将此角色分配给代表集群成员的用户对象,例如副本集成员和 mongos 实例。该角色授权其持有者对数据库中的任何对象采取任何行动。

除非在特殊情况下,否则不要将此角色分配给代表应用程序或人工管理员的用户对象。

  • @octohedron 此差异中的最后一个文件显示了它: https://github.com/mongodb/mongo/commit/eb3435c25eabc90e2c4ff7c331c94c4c222d0b7e 另一个来源是 https://www.percona.com/blog/2019/07/12/mongodb-security -vs-五个坏人/ (2认同)