MongoDB未授权查询 - 代码13

Guy*_*Guy 24 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"
                }
        ]
}
Run Code Online (Sandbox Code Playgroud)

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

db.mycollectionname.find()
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

error: { "$err" : "not authorized for query on mydbname.request", "code" : 13 }
Run Code Online (Sandbox Code Playgroud)

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

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

Seb*_*ian 23

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

该dbAdmin角色并没有包括在读访问非系统集合.

  • 为什么管理员没有阅读权? (50认同)
  • 你怎么补充呢? (25认同)

tic*_*fab 20

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

?authMode=scram-sha1
Run Code Online (Sandbox Code Playgroud)

在我的mongodb uri结尾.

以下是一些解释scram-sha1目的的文档


Fla*_*dre 9

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

授予角色

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

db.grantRolesToUser(
    "your_user",
    [
      { role: "read", db: "your_db" }
    ]
)
Run Code Online (Sandbox Code Playgroud)


小智 6

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

MongoError: not authorized on mydb to execute command { count: "urls", query: {} }
Run Code Online (Sandbox Code Playgroud)

此错误是由使用错误分隔符的用户名和密码引起的

mongodb://myuserid/mypassword@ds112345.mlab.com:12345/mydb [wrong]
mongodb://myuserid:mypassword@ds112345.mlab.com:12345/mydb [right]
Run Code Online (Sandbox Code Playgroud)

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

谢谢并向mLab支持人员致敬。

  • 实际上,这就是通过URL编码定义基本HTTP身份验证的方式-遵循此标准的任何资源(如MongoDB)都将要求相同的格式。参见https://en.wikipedia.org/wiki/Basic_access_authentication#URL_encoding (2认同)