如何在2.6中向Mongo添加管理员用户?

时间:2014-04-11 04:15:03

标签: mongodb database-administration

我从2.4升级到2.6并且身份验证失败了。 This tutorial似乎很简单,但我一直被锁在自己的数据库之外。我的情况很简单,我有一个Mongo服务器,需要一个用户/密码组合来连接。

首先,我通过提到的localhost异常进行连接。然后我按照建议创建管理员用户:

use admin
db.createUser(
  {
    user: "myadmin",
    pwd: "mysecret",
    roles:
    [
      {
        role: "userAdminAnyDatabase",
        db: "admin"
      }
    ]
  }
)

现在是时候添加新用户了所以要理智地检查自己,我注销了shell。现在当我输入" mongo"它失败。以前工作但是没问题,它没有看到用户名密码,我想本地主机例外不再存在,所以我按照here概述的说明进行操作:

mongo --port 27017 -u myadmin -p mysecret --authenticationDatabase admin

我得到了:

MongoDB shell version: 2.6.0
connecting to: 127.0.0.1:27017/test
Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }
>

关于如何:

的任何想法
  1. 设置Mongo 2.6,这样我就可以轻松进出管理数据库的shell(我认为这是"系统用户管理员")

  2. 从远程客户端启用用户连接? (只是mongo方面,iptables无需帮助......)

  3. 谢谢!

3 个答案:

答案 0 :(得分:31)

显然“系统用户管理员”还不够。创建root用户:

> db.createUser({user:"someadmin",pwd:"secret", roles:[{role:"root",db:"admin"}]})

然后添加您的数据库用户:

> use some_db
> db.createUser(
    {
      user: "mongouser",
      pwd: "someothersecret",
      roles: ["readWrite"]
    }
)

有关this gist的更多详情。评论关于SO欢迎的要点和更好的答案 - 我不是一个系统管理员

答案 1 :(得分:1)

1)您分配admin user-userAdminAnyDatabase的角色没有无限制的权限。它只是一个允许在任何数据库上创建和管理用户的角色。显然,默认情况下,它不能执行与管理数据库用户不直接相关的某些命令(例如从日志中获取启动警告,查询服务器状态等)。

您可以使用'root'角色代替Tony建议。如果您打算使用root帐户进行设置和管理,然后只需要几个基本的读/写特权帐户与数据库通信,这可能是最有意义的。

2)通常,在客户端连接只需要在从客户端代码连接后调用db.authenticate()函数。根据您为客户端使用的驱动程序/语言,有不同的方法可以执行此操作。 node.js驱动程序代码非常典型:http://mongodb.github.io/node-mongodb-native/api-generated/db.html#authenticate

答案 2 :(得分:0)

即使遵循@ Tony的方法,我也得到了

`com.mongodb.CommandFailureException:`

添加

compile 'org.mongodb:mongo-java-driver:2.13.1'
然而,在BuildConfig.groovy的Dependency部分中,

解决了这个问题。