在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 }
有什么想法可以发生什么?
到目前为止,我已尝试将我可以找到的每个角色添加到用户,但这没有帮助。
答案 0 :(得分:22)
答案 1 :(得分:20)
答案 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类不同的数据库而没有意识到它。也许你可以检查一下。