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)
有什么想法可以发生什么?
到目前为止,我已经尝试添加我可以找到的每个角色给用户,但这没有帮助.
tic*_*fab 20
对于遇到针对Mongo 3.0.6的这个问题的任何人,我通过添加修复
?authMode=scram-sha1
Run Code Online (Sandbox Code Playgroud)
在我的mongodb uri结尾.
以下是一些解释scram-sha1目的的文档
除了@ 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支持人员致敬。