Ответ 1
Вам необходимо назначить роль read
соответствующему пользователю.
dbAdmin
роль не включает доступ для чтения в несистемных коллекциях.
В MongoDB 2.6.1 Я настроил пользователя с правами dbAdmin:
{
"_id" : "mydbname.myusername",
"user" : "myusername",
"db" : "mydbname",
"credentials" : {
"MONGODB-CR" : "<some credentials>"
},
"roles" : [
{
"role" : "dbAdmin",
"db" : "mydbname"
}
]
}
Когда я использую оболочку mongo для подключения к базе данных (используя -u и -p в командной строке) и запускайте такой запрос:
db.mycollectionname.find()
Я получаю эту ошибку:
error: { "$err" : "not authorized for query on mydbname.request", "code" : 13 }
Любые идеи, что может произойти?
До сих пор я пытался добавить каждую роль, которую я могу найти для пользователя, но это не помогло.
Вам необходимо назначить роль read
соответствующему пользователю.
dbAdmin
роль не включает доступ для чтения в несистемных коллекциях.
Для любого, кто сталкивается с этой проблемой против Mongo 3.0.6, я исправил добавление
?authMode=scram-sha1
в конце моего монгодб-ури.
Вот некоторые документы, объясняющие цель scram-sha1
В дополнение к ответу @Sebastian это означает явно:
Предоставить роль
Предоставить роль, используя метод db.grantRolesToUser(). Например, следующая операция предоставляет отчетам Пользователю пользователя роль чтения на база данных учетных записей:
db.grantRolesToUser(
"your_user",
[
{ role: "read", db: "your_db" }
]
)
Я опубликовал это, потому что у меня возникли проблемы с поиском этого решения в Интернете. Проблема неловкая, но сообщение об ошибке и сценарий несколько затрудняют ее выяснение, поэтому я надеюсь немного сэкономить. Мое приложение смогло установить соединение с базой данных, запустить и обслуживать статические страницы, но каждый раз, когда он пытался выполнить запрос, я получил эту ошибку.
MongoError: not authorized on mydb to execute command { count: "urls", query: {} }
Эта ошибка была вызвана идентификатором пользователя и паролем с неправильным разделителем
mongodb://myuserid/[email protected]:12345/mydb [wrong]
mongodb://myuserid:[email protected]:12345/mydb [right]
В то время как приложение node смогло успешно подключиться к MongoDB, неправильно отформатированный URI заставил драйвер пропустить аутентификацию до выдачи команд базы данных.
Спасибо и наконечник шляпы людям при поддержке mLab.
В моем случае помогло добавить ?authSource=admin
к uri.
Итак, ури выглядело так:
spring.data.mongodb.uri=mongodb://user:[email protected]:port/database?authSource=admin
Я получаю ошибку как
err {MongoError: не авторизован в XXXX для выполнения команды {$ eval: function() {return db.tbl_user.find({
For me role executeFunctions worked. У меня роль executeFunctions выполнялась. Once you give role your user should look like following... После того, как вы назначите роль, ваш пользователь должен выглядеть следующим образом...
{ "_id": "XXXXX", "user": "USERXXX", "db": "DBXXXX", "roles": [ { "role": "executeFunctions", "db": "admin" }, { "role": "dbOwner", "db": "fryendsapp" } ] } {"_id": "XXXXX", "user": "USERXXX", "db": "DBXXXX", "role": [{"role": "executeFunctions", "db": "admin"}, {" role ":" dbOwner "," db ":" fryendsapp "}]}
У меня была та же проблема, после многих проб и ошибок я решил ее, добавив роль "чтение" для моего пользователя, но также указав базу данных:
db.grantRolesToUser("myUserName",
[{ role: "read", db: "myDataBaseName"}] );
Привет
У меня была такая же проблема, пока я не понял, что допустил ошибку. Я наследовал клиента mongo, указывающего на другую базу данных из родительского класса Perl, не осознавая этого. Возможно, вы можете проверить.