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

15

我从2.4升级到2.6,认证就崩了。 这个教程 看起来很简单,但我一直被锁在自己的数据库之外。我的情况非常简单,我有一个单独的Mongo服务器,需要一个用户名/密码组合来连接。

首先,我像提到的那样通过本地主机例外连接。然后我按建议创建管理员用户:

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

现在是添加新用户的时候了,为了检查自己,我退出了shell。现在当我输入"mongo"时,它失败了。以前可以用,但没关系,它没有看到用户名密码,我猜本地异常不再存在,所以我按照此处说明的指示操作:

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的帮助...)

谢谢!


1
我也遇到了同样的问题...即使你非常认真地按照教程操作,但仍然失败,这真的很让人沮丧。MongoDB需要认真关注其文档。 - inorganik
3个回答

32

显然,“系统用户管理员”不够用。创建一个根用户:

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

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

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

更多详细信息请查看此代码片段。欢迎在代码片段和stackoverflow提供评论和更好的答案 - 我不是系统管理员。


1
如果您不需要root的完全控制权限,userAdmin角色同样适用。请参考http://docs.mongodb.org/manual/reference/built-in-roles/#userAdmin。 - twiz

1

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

您可以像Tony建议的那样,使用“root”角色。如果您要使用root帐户进行设置和管理,然后只有几个基本的读/写特权帐户与数据库交互,那么这可能是最合适的选择。

2)一般来说,在客户端连接只需要在客户端代码连接后调用db.authenticate()函数即可。这取决于您为客户端使用的驱动程序/语言,有不同的实现方式。node.js驱动程序代码非常典型: http://mongodb.github.io/node-mongodb-native/api-generated/db.html#authenticate


0

即使按照@Tony的方法,我仍然遇到了一个问题

`com.mongodb.CommandFailureException:`

添加

compile 'org.mongodb:mongo-java-driver:2.13.1'

在 BuildConfig.groovy 的依赖部分修复了该问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接