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


29

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

Answers:


38

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

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

确实删除身份验证还不够,谢谢!
Andrei

14

创建用户而不先添加超级用户时,我遇到了类似的问题。以下步骤有助于解决该问题:

  1. 使用sudosudo 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"}]});

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

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


我感激不尽。当我将项目上传到开发服务器时,我一直试图找出答案。非常感谢!:)
Woppi

同上。服务器错误消息对此毫无帮助。谢谢!
汤姆(Tom)

7

如果您将副本集与keyfile

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

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

security:
  keyFile: <path-to-keyfile>
replication:
  replSetName: <replicaSetName>

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

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

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

内部角色

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

除特殊情况外,请勿将此角色分配给代表应用程序或人工管理员的用户对象。


您在哪里找到此信息?
八面体

2

检查此问题的答案,可能会有所帮助

https://stackoverflow.com/questions/20117104/mongodb-root-user

基本上,如果您仍然有权访问服务器,则可以访问Admin数据库。

此页面还有更多内容http://docs.mongodb.org/v2.4/reference/user-privileges/

请注意,2.6版更改了其完全工作方式。对于2.6,您需要花更多时间在http://docs.mongodb.org/manual/security/


1
如文章所述,这是我唯一能找到的信息。我没有这样做的权限
Tony

0

您必须停止Mongo,删除管理文件,然后启动Mongo

sudo service mongod stop
mv /data/admin.* .
sudo service mongod start

2
这将破坏管理用户数据库,并允许通过“ localHostExcetption”进行访问,这不是在遇到问题时管理用户的好方法。
daveh 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.