MongoDB未授权查询 - 代码13

时间:2014-05-12 21:15:06

标签: mongodb mongodb-roles

在MongoDB 2.6.1中,我设置了一个具有dbAdmin权限的用户:

{
        "_id" : "mydbname.myusername",
        "user" : "myusername",
        "db" : "mydbname",
        "credentials" : {
                "MONGODB-CR" : "<some credentials>"
        },
        "roles" : [
                {
                        "role" : "dbAdmin",
                        "db" : "mydbname"
                }
        ]
}

当我使用mongo shell连接数据库时(在命令行上使用-u和-p)并运行如下查询:

db.mycollectionname.find()

我收到此错误:

error: { "$err" : "not authorized for query on mydbname.request", "code" : 13 }

有什么想法可以发生什么?

到目前为止,我已尝试将我可以找到的每个角色添加到用户,但这没有帮助。

8 个答案:

答案 0 :(得分:22)

您需要将read角色分配给相关用户。

dbAdmin角色包含非系统集合的读取权限。

答案 1 :(得分:20)

对于遇到针对Mongo 3.0.6的这个问题的任何人,我通过添加

来修复
?authMode=scram-sha1

在我的mongodb uri的末尾。

以下是一些解释scram-sha1

目的的文档

答案 2 :(得分:9)

除了@ Sebastian的回答,这意味着明确:

  

授予角色

     

使用db.grantRolesToUser()方法授予角色。例如,   以下操作授予reportsUser用户读取角色   帐户数据库:

db.grantRolesToUser(
    "your_user",
    [
      { role: "read", db: "your_db" }
    ]
)

答案 3 :(得分:5)

我发布此信息是因为我无法在线找到此解决方案。这个问题令人尴尬,但是错误信息和场景让我有点难以弄明白,所以我希望能够为某些人带来一些痛苦。 我的应用程序能够建立数据库连接,启动和提供静态页面,但每次尝试执行查询时都会出现此错误。

MongoError: not authorized on mydb to execute command { count: "urls", query: {} }

此错误是由具有错误分隔符的用户标识和密码引起的

mongodb://myuserid/mypassword@ds112345.mlab.com:12345/mydb [wrong]
mongodb://myuserid:mypassword@ds112345.mlab.com:12345/mydb [right]

虽然节点应用程序能够成功连接到MongoDB,但格式错误的URI会导致驱动程序在发出数据库命令之前跳过身份验证。

在mLab支持下,感谢并向人们致敬。

答案 4 :(得分:2)

就我而言,这有助于将?authSource=admin添加到uri。

所以uri看起来像这样:

spring.data.mongodb.uri=mongodb://user:password@host:port/database?authSource=admin

答案 5 :(得分:0)

我遇到了类似

的错误

err {MongoError:未经XXXX授权执行命令{$ eval:function(){return db.tbl_user.find({

对我来说,executeFunctions起作用了。授予角色后,您的用户应如下所示……

{     “ _id”:“ XXXXX”,     “ user”:“ USERXXX”,     “ db”:“ DBXXXX”,     “角色”:[         {             “ role”:“ executeFunctions”,             “ db”:“ admin”         },         {             “ role”:“ dbOwner”,             “ db”:“ fryendsapp”         }     ] }

答案 6 :(得分:0)

我遇到了同样的问题,经过反复试验,我通过向用户添加“读取”角色但也指示数据库来解决该问题:

db.grantRolesToUser("myUserName",
[{ role: "read", db: "myDataBaseName"}] );

问候

答案 7 :(得分:-4)

在我意识到自己犯了错误之前,我遇到了同样的问题。我继承了一个mongo客户端,指向与父Perl类不同的数据库而没有意识到它。也许你可以检查一下。