【问题标题】:What MongoDB user privileges do I need to add a user to a new/another mongo database?我需要哪些 MongoDB 用户权限才能将用户添加到新的/另一个 mongo 数据库?
【发布时间】:2013-12-29 18:40:33
【问题描述】:

添加一个具有以下权限的管理员用户后,我在 MongoDB 配置文件中启用了身份验证:userAdminuserAdminAnyDatabase

现在我将此用户连接到定义此管理员用户的数据库(否​​则我会得到exception: login failed)。

成功连接后,我想将新用户添加到新数据库。为此,我正在尝试:

use another
db.addUser(...)

但我得到一个错误:

Wed Dec 11 17:45:18.277 couldn't add user: not authorized for insert on app.system.users at src/mongo/shell/db.js:128

如何创建新数据库并向其中添加第一个用户?


详细(本例中所有用户的密码都是1234)

$ mongo mono -u admin_all -p 1234
MongoDB shell version: 2.4.6
connecting to: mono
> db.system.users.find()
{ "_id" : ObjectId("52a9831de41eb640bb0f5f64"), "user" : "admin_all", "pwd" : "a6316ed4886c10663cce46bc216ea375", "roles" : [  "userAdmin",  "userAdminAnyDatabase" ] }
{ "_id" : ObjectId("52a98404ef1f9bc934b62e11"), "user" : "admin_one", "pwd" : "884f516cf308a4c6a75bbc5a0a00807b", "roles" : [  "userAdmin" ] }
{ "_id" : ObjectId("52a98415ef1f9bc934b62e12"), "user" : "admin_any", "pwd" : "1616611df9b47c58b607054d384cab99", "roles" : [  "userAdminAnyDatabase" ] }
> use another
switched to db another
> db.addUser({ user: "user", pwd: "1234", roles: ["read"] })
{
    "user" : "user",
    "pwd" : "461d4f349d8d4ec3d22a4c945010c330",
    "roles" : [
        "read"
    ],
    "_id" : ObjectId("52a985372fcdbfd033003a7e")
}
Thu Dec 12 10:43:19.091 couldn't add user: not authorized for insert on another.system.users at src/mongo/shell/db.js:128

【问题讨论】:

  • 您能否执行提供 admin db system.users 记录和用于数据库 addUser 的实际命令?请更改此密码。如果语法正确,您所遵循的过程应该可以工作。
  • @JamesWahlin 我已经添加了我得到的详细输出。我也报告了这个here
  • 如果你直接登录到“db.another”,比如:mongo another -u admin_all -p 123 然后尝试添加用户呢?
  • 不起作用。但刚刚找到了解决方案。

标签: security mongodb privileges access-control


【解决方案1】:

犯的错误是我在 admin 数据库中使用了一个 NOTuserAdminAnyDatabase 用户(请参阅this note)。所以必须在您的服务器上有一个名为 admin 的数据库!正如文档所说的“AnyDatabase”权限:

如果您将这些角色中的任何一个添加到 admin 数据库之外的用户权限文档,则该权限将无效。

所以你必须:

  • userAdminAnyDatabase 添加到admin 数据库

    $ mongo admin
    > db.createUser({ user: "myadmin", pwd: "1234", roles: ["userAdminAnyDatabase"] })
    
  • 开启身份验证

    auth = true
    setParameter = enableLocalhostAuthBypass=0
    
  • 使用新的myadmin 用户连接到您想要的任何数据库并添加更多用户:

    $ mongo another -u myadmin -p 1234
    > db.createUser({ user: "user", pwd: "1234", roles: ["readWrite"] })
    

    > use another
    > db.createUser({ user: "user", pwd: "1234", roles: ["readWrite"] })
    

【讨论】:

  • 我为此苦苦挣扎了一段时间。最终我最终使用了 MongoChef。首先,我在 mongo 配置中禁用了身份验证。然后我连接到我的 Amazon EC2 实例的 Mongo DB,使用 MongoChef 创建一个 SSH 隧道。从那里我设置了权限,重新启动了 mongo,然后一切正常。我什至能够将我的本地集合导出到远程实例中。
  • 太棒了!顺便说一句,我不需要执行第 2 步
  • 现在返回警告:“addUser”外壳助手已弃用。请改用“createUser”
  • 在哪里设置 enableLocalhostAuthBypass=0 ?它在配置文件中吗?
  • 如何使用社区控制器在 kubernetes 中的 mongo 中执行此操作?
【解决方案2】:

假设我已经在 MongoDB 中有一个管理员用户(称为 admin),这对我创建一个连接到数据库 prod 的用户 prod 有用:

> mongo admin --username root --password <pwd>
> use prod
> db.createUser(
  {
    user: "prod",
    pwd: "<pwd>",
    roles: [ { role: "dbOwner", db: "prod" } ]
  }
)
> exit

之后,您可以像这样使用新用户prod 登录:

> mongo prod  --username prod --password <pwd>

【讨论】:

    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 2011-01-01
    • 2016-09-13
    • 1970-01-01
    • 2015-01-15
    • 2019-12-24
    • 1970-01-01
    • 2020-12-27
    相关资源
    最近更新 更多