Подтвердить что ты не робот

Не разрешено для запроса на admin.system.namespaces на mongodb

Я запускаю новый экземпляр mongo, создаю пользователя, авторизую его, но когда я запускаю "show collections", система говорит, что идентификатор не авторизовался. Я не знаю почему?

# mongo admin
MongoDB shell version: 2.4.3
connecting to: admin
Server has startup warnings:
Thu May 23 18:23:56.735 [initandlisten]
Thu May 23 18:23:56.735 [initandlisten] ** NOTE: This is a 32 bit MongoDB binary.
Thu May 23 18:23:56.735 [initandlisten] **       32 bit builds are limited to less than 2GB of data (or less with --journal).
Thu May 23 18:23:56.735 [initandlisten] **       See http://dochub.mongodb.org/core/32bit
Thu May 23 18:23:56.735 [initandlisten]
> db = db.getSiblingDB("admin")
admin
> db.addUser({user:"sa",pwd:"sa",roles:["userAdminAnyDatabase"]})
{
        "user" : "sa",
        "pwd" : "75692b1d11c072c6c79332e248c4f699",
        "roles" : [
                "userAdminAnyDatabase"
        ],
        "_id" : ObjectId("519deedff788eb914bc429b5")
}
> show collections\
Thu May 23 18:26:50.103 JavaScript execution failed: SyntaxError: Unexpected token ILLEGAL
> show collections
Thu May 23 18:26:52.418 JavaScript execution failed: error: {
        "$err" : "not authorized for query on admin.system.namespaces",
        "code" : 16550
} at src/mongo/shell/query.js:L128
> db.auth("sa","sa")
1
> show collections
Thu May 23 18:27:22.307 JavaScript execution failed: error: {
        "$err" : "not authorized for query on admin.system.namespaces",
        "code" : 16550
} at src/mongo/shell/query.js:L128
4b9b3361

Ответ 1

У меня была та же проблема, но я нашел этот учебник, и это помогло мне.

http://www.hacksparrow.com/mongodb-add-users-and-authenticate.html

использование:

db.addUser('sa', 'sa')

вместо

db.addUser({user:"sa",pwd:"sa",roles:["userAdminAnyDatabase"]})
{
        "user" : "sa",
        "pwd" : "75692b1d11c072c6c79332e248c4f699",
        "roles" : [
                "userAdminAnyDatabase"
        ],
        "_id" : ObjectId("519deedff788eb914bc429b5")
}

Ответ 2

Как говорит Роберт, администратор имеет только права администратора, а не писать в базах данных. Таким образом, вы должны создать пользовательский пользователь для своей базы данных. Там разные способы. Я выбрал путь dbOwner.

(Я использую Ubuntu Server, mongo 2.6.3 и Robomongo)

Чтобы сделать это, создайте своего администратора, как mongo, сообщите:

введите mongo в оболочку linux

и эти команды в оболочке mongo:

use admin
db.createUser({user:"mongoadmin",pwd:"chooseyouradminpassword",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
db.auth("mongoadmin","chooseyouradminpassword")
exit

отредактируйте файл mongo conf с помощью:

nano /etc/mongod.conf

Вы можете использовать vi, если nano не установлен.

активировать аутентификацию без комментирования/добавления этой строки auth=true

если вы хотите использовать Robomongo с другой машины, измените строку bind_ip=127.0.0.1 на bind_ip=0.0.0.0 (возможно, вы должны добавить дополнительную защиту в производство).

введите в оболочку linux:

service mongod restart
mongo

И в оболочке mongo:

use admin
db.auth("mongoadmin","pwd:"chooseyouradminpassword")
use doomnewdatabase
db.createUser({user:"doom",pwd:"chooseyourdoompassword",customData:{desc:"Just me as I am"},roles : [{role:"dbOwner",db:"doomnewdatabase"}]})
db.auth("doom","chooseyourdoompassword")
show collections

(customData не требуется).

Если вы хотите попробовать, если он работает, введите это в оболочке mongo:

db.products.insert( { item: "card", qty: 15 } )
show collections
db.products.find()

Удачи! Надеюсь, это поможет вам и другим!

Я искал эту информацию часами.

Ответ 3

У меня была та же проблема, и вот как я ее решил:

db = db.getSiblingDB('admin')
db.addUser( 
    { user: "mongoadmin", 
      pwd: "adminpass", 
      roles: ['clusterAdmin', 'userAdminAnyDatabase', 'readAnyDatabase'] } )

Ответ 4

Для версии MongoDB 2.6 используйте:

db.createUser(
{
   user: "testUser"
   pwd: "password",
   roles: [{role: "readWrite", db:"yourdatabase"}]
})

См. docs

Ответ 5

Я решил это так для mongoDB 2.6 + в настоящее время 3

db.createUser(
  {
    user: "username",
    pwd: "password",
    roles: [ { role: "root", db: "admin" } ]
  }
)

обратите внимание, что для роли, поданной вместо userAdminAnyDatabase, мы используем root

Ответ 6

Я бы попробовал предоставить роль чтения пользователю. userAdminAnyDatabase предоставляет возможность администрировать пользователей.