【问题标题】:MongoDB: Not authorized on database to execute command evalMongoDB:未在数据库上授权执行命令 eval
【发布时间】:2018-05-16 13:08:52
【问题描述】:

这是我正在运行的查询:

db.surveyquestion.copyTo('surveyquestionV2')

我得到的错误:

{
    "message" : "MongoError: not authorized on GenericSurveyTool to execute command { $eval: function (collName, newName) {\r" +
              "var from = db[collName];\r" +
              "..., args: [ 'surveyquestion', 'surveyquestionV2' ], $db: 'GenericSurveyTool' }",
    "stack" : "script:1:19",
    "code" : 13
}

我用于运行此查询的管理数据库中的用户:

query:  db.getUsers();


/* 2 */
{
    "_id" : "admin.moiz",
    "user" : "moiz",
    "db" : "admin",
    "roles" : [
        {
            "role" : "root",
            "db" : "admin"
        }
    ]
}

我有这个具有 root 角色的用户,但我仍然无法复制集合。请帮忙!!

【问题讨论】:

  • 在你的角色数组中尝试使用 dbOwner 而不是 root
  • 它不工作,同样的问题仍然存在。
  • 只是为了确定,您是否在启动查询之前验证为 moiz ?
  • 是的,这是肯定的
  • 我刚刚在 db.eval() 命令的文档中看到了这一点:If authorization is enabled, you must have access to all actions on all resources in order to run eval. Providing such access is not recommended, but if your organization requires a user to run eval, create a role that grants anyAction on anyResource. Do not assign this role to any other user.

标签: mongodb mongodb-query database-administration rbac


【解决方案1】:

对于有同样问题的人,解决方案在db.eval()的文档中:just right here

如果启用了授权,您必须有权访问所有资源上的所有操作才能运行 eval。不建议提供此类访问权限,但如果您的组织需要用户运行 eval,请创建一个角色来授予对 anyResource 的 anyAction。不要将此角色分配给任何其他用户。

【讨论】:

  • 除了文档中的引用之外,这里真的没什么,所以我真的不确定它是否应该是一个答案。响应的最大问题是它没有强调 eval 实际上已被弃用并且应该从 MongoDB 中完全删除,因此任何人编写使用它的当前代码都是不明智的,因为他们的代码将简单地停止工作,这实际上是在文档中说明的。就像其他各种警告一样,它们确实应该放在任何响应的最前沿。
猜你喜欢
  • 2019-05-30
  • 1970-01-01
  • 2018-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-16
  • 1970-01-01
相关资源
最近更新 更多