MongoDB:未经数据库授权执行命令eval

Abd*_*oiz 0 database-administration rbac mongodb mongodb-query

这是我正在运行的查询:

db.surveyquestion.copyTo('surveyquestionV2')
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

{
    "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
}
Run Code Online (Sandbox Code Playgroud)

我正在运行此查询的admin数据库中的用户:

query:  db.getUsers();


/* 2 */
{
    "_id" : "admin.moiz",
    "user" : "moiz",
    "db" : "admin",
    "roles" : [
        {
            "role" : "root",
            "db" : "admin"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

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

小智 6

对于有相同问题的人,解决方案在的文档中db.eval()就在这里

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

  • 除了文档中的引言外,这里确实没有什么其他内容,所以我真的不确定是否应该提供答案。响应的最大问题是,它没有突出显示实际上不建议使用eval并应将其完全从MongoDB中删除,因此任何人编写使用该代码的当前代码都是不明智的,因为他们的代码将停止运行工作,这实际上是在文档中阐明。和其他各种警告一样,这些警告实际上应该放在任何响应的最前沿。 (2认同)